Django Aware

OneToOne Fields And The Primary Key Issue

By Paul Kenjora | June 23, 2008

Django provides one-many ForeignKey, many-many ManyToManyField, and one-one OneToOneField options for defining table relationships. The OneToOneField specifically has recently been the topic of heated debates and ideas. Unlike the other options this field is by always constrained to be a “Primary Key”. The restriction implies that each table may ONLY have one OneToneField. Why is this wrong?

OneToOneField Primary Key Constraint Is Wrong

The “Primary Key” constraint (you cannot turn it off) is wrong because a schema often needs to define a property that can be applied to multiple objects. This property is the same but can be one-one with different tables, its a mutable property. Here is a great example:

  1. Tip (table describing tipping rules) applies to a Person (1-1).
  2. Tip (same rules) applies to Restaurant (1-1).
  3. I want to describe the tipping rules for a Person or a specific Restaurant (or a combination of the two). Each case is a (1-1). A foreign key would complicate things here and not reflect the true meaning of Tip. Tip is always 1-1 with at least one other table, that table can vary though.

This is a very common approach for adding properties to objects. I understand the desire to have one-one raltionships describe only is-a relations but they can and should be so much more powerful. I’ve documented the problem on Django’s Ticket #7367: Cannot have non-primary-key OneToOneField to parent class. The debate over the pure is-a constraint is strange because the workaround to the “Primary Key” issue is a quick 3 liner that does not violate the is-a relationship.

Fixing The OneToOneField Primary Key Constraint

The solution is to use “Primary Key” and thus preserve is-a behavior where appropriate but add the ability to make the relationship optional. I decided to use “null=True” as an indicator that the relationship is optional, same convention as ForeignKey. Once the field becomes optional then its constraint changes to “Unique”. The code below achieves this:

Around Line 585 in Django File: db/models/fields/related.py

So its possible to have a clean is-a and more mutable is-a relationship without breaking the system. I’m surprised that Django core developers are constraining the database layer, it seems to violate the coolness of Django + Python. I’ve always liked that the Django framework gives me so much out of the box and at the same time allows me to super customize my projects. For no other reason but to keep Django awesome lets not add artificial constraints where they do not need to exist.

Topics: Database API Revisions, Model Revisions, Tutorial | No Comments »

Arkayne Out Of Beta

By Paul Kenjora | June 7, 2008

The road has been fun and at times tedious but Arkayne is finally out of Beta. For those of you not familiar with the project, its a content linking widget that works on relevance. Think of it as the "Amazon Similar Items" for blogs.

Arkayne started as a side project and has grown to almost 100,000 pages and over 1,000,000 hits with a click through rate (CTR) of 1.77%. The decision to move out of beta came to me while having lunch with a fellow site administrator who was running the Arkayne widget. He mentioned that while running the widget, his Google Analytics actually showed a notable flow of traffic from his front page posts to other stories on the site. That was a my moment of Zen that meant Arkayne delivers and needs to be taken to the next level.

Here are some major hurdles we overcame to get out of Beta…

For all our Beta user’s, thank you for believing in Arkayne when it was still in its infancy. For our bloggers, Arkayne will strive to drive as much relevant traffic as possible. For the readers of those blogs, Arkayne will work to make content as relevant and useful as possible.

The Arkayne.com has much more information. All statistics like 100,000 pages and over 1,000,000 hits with a CTR of 1.77% are displayed live in the upper right corner of every page. For more information on the Arkayne sponsored links program please visit the official program description.

Topics: Arkayne, Tech News | No Comments »

Amazon EC2 Basics For The Curious

By Paul Kenjora | June 3, 2008

For those of you wondering what it would be like to host and maintain a Django application (or any application) on Amazon’s Elastic Computing Cloud (EC2) here is a basic list of daily operations. These steps assume you’ve set up your Amazon account. This is the basic set of commands you can use to fully administer an EC2 server. A note to some of you, don’t soil your hacking trousers, the keys and file names below are fake.

  1. Show all instances that are currently running, useful if you want to connect to your server.

    ec2-describe-instances

  2. Show all images so you can pick one to run. With EC2 you can choose an image and run it on a variety of machine configurations. Great for scaling. Creating images is as simple as picking an existing one and editing it, EC2 comes with a few out of the box images. Default images are covered in the oficial Amazon EC2 getting started guide.

    ec2-describe-images

  3. Run an image. This is how you start a server. Same as hitting the power on button on a physical server.

    ec2-run-instances ami-4850b521 -k my-gsg-keypair

  4. Connect to an image, and do anything you want. You can use a key or log in and enter the password on the command line. Just like any other server.

    ssh -i my-gsg-keypair root@ec2-75-101-194-32.compute-1.amazonaws.com

  5. Attach a static IP to the new instance. This is great if youre running a website, your instance now has a static IP you can point any DNS at. Advantage here is you retain static API even if you upgrade your instance to a more powerful machine.

    ec2-associate-address -i i-b148b5gt 75.101.145.136

  6. If creating a new AMI or backing up existing instance you need to upload your key and certificate so the bundle utility knows how to encrypt your stored backup of an image.

    scp -i my-gsg-keypair pk-2WWJUDIZFYTYZN4JEBGSR5Z5E3SABDT7.pem cert-2WWJUDIZFYTYZN4JEBGSR5Z5E3SABDT7.pem root@ec2-75-101-194-32.compute-1.amazonaws.com:/mnt

  7. Once your instance (server) is running you can do things within it as root. It looks exactly like any other server I’ve seen. I even installed Django and some python libraries using yum on a fedora instance. So after you log into a running instance…

    • Fetch code from a repository and install it to home for example.

      cd /home

      svn co some project>/p>

      export PYTHONPATH=/home

    • Fetch database from your current server and install it on your instance. I picked a start image that already had Apache and MySQL.

      mysql

      CREATE DATABASE project;

      GRANT ALL ON project.* TO user@localhost IDENTIFIED BY ’some_password’;

      mysql -D project < project.mysql

    • After setting your instance up or maybe just to back it up, you need to save it to an image. EC2 instances loose ALL data if they are shut down or crash. The problem is not as bad as you think, a simple cron job to back up the instance to Amazon Simple Storage Service (S3) is all it takes. This is actually better than a typical server because you’re guaranteed to have a backup. So think of it as something you should be doing anyway. This requires step 6 above…

      rm -f /mnt/image

      ec2-bundle-vol -d /mnt -k /mnt/pk-2WWJUDIZFYTYZN4JEBGSR5Z5E3SABDT7.pem -c /mnt/cert-2WWJUDIZFYTYZN4JEBGSR5Z5E3SABDT7.pem -u 451222037441 -r i386

      ec2-upload-bundle -b project -m /mnt/image.manifest.xml -a 13BNUHIBGPAQ48JQ3NV1 -s grAbTUXLUjHnuff7Hpl/hNd3qTSH0WdklZZ2UB+j

  8. Every time you save an instance to an image you have to register it before launching that instance. So if your server crashes you will have to run the following command before launching it again from a backup.

    ec2-register project/image.manifest.xml

  9. When you first set up your account you should probably open up a few ports. Opening a port to allow ssh or ftp etc…

    ec2-authorize default -p 22

Well thats about it for EC2. I hope the whole thing does not seem as daunting anymore. My experience with the entire system including billing has been great. I set up my first EC2 instance in 35 minutes after hearing about it at a conference. Since then I’ve only used the commands to bundle and backup my instance. I strongly suggest Django developers who outgrow shared hosts move to this service, coupled with some of the tools for auto launching instances and scaling to handle load this is the best hosting option I’ve ever seen.

The intent of this article is to scratch the surface and boil EC2 down for anyone considering it, with only a handful of commands to completely control and back up a server I think the case is solid. For more advanced projects Amazon offers so many tools it would be best to visit the official Amazon Web Services page.

Topics: Tech News, Tutorial | No Comments »

Installing MySQLdb Without Python Egg Problems

By Paul Kenjora | May 31, 2008

When installing Django sooner or later you will come across a system that needs MySQLdb and sooner or later you will see the following error:

[Sat May 31 19:43:19 2008] [error] [client 99.165.134.196] PythonHandler django.core.handlers.modpython: ExtractionError: Can’t extract file(s) to egg cache\n\nThe following error occurred while trying to extract file(s) to the Python egg\ncache:\n\n [Errno 13] Permission denied: ‘/root/.python-eggs’\n\nThe Python egg cache directory is currently set to:\n\n /root/.python-eggs\n\nPerhaps your account does not have write access to this directory? You can\nchange the cache directory by setting the PYTHON_EGG_CACHE environment\nvariable to point to an accessible directory.\n

The fix is to set the PYTHON_EGG_CACHE environment variable before running the install. The install instructions do not make this clear and the error sounds like the path needs to be set after install. Here are the steps to avoid the above error.

  1. Download the tarball from SourceForge.
  2. $ tar zxvf [filename of MySQLdb tarball]
  3. $ cd [name of resulting directory]
  4. $ export PYTHON_EGG_CACHE=/var/cache/python-eggs
  5. $ mkdir /var/cache/python-eggs
  6. $ chmod 777 /var/cache/python-eggs
  7. $ python setup.py build
  8. $ python setup.py install

Thats it. I’ve only run into this issue on Fedora within Amazon EC2. Other platforms and versions of the MySQLdb module may work.

Topics: Environment Setup, Tutorial | 3 Comments »

Authenticating Using Email vs Username

By Paul Kenjora | May 18, 2008

A few weeks back I posted the full source for user logins and password recovery under Everything A Django Developer Needs To Create Logins. There was a little bit of flack from some very passionate and smart individuals (James Bennet) insisting that this middle ware already exists in "contrib.auth;". On the other hand I received many emails thanking me for the post because it boiled down the login system for novice users. In the spirit of helping new people adopt Django and existing users improve it here is a back end modification to allow email based logins in addition to the traditional default username login.

The file: django/contrib/auth/backends.py

I started by creating a whole new backend but it turned out to be tons of copy and paste code. The solution above meets all the requirements for a backend interface and is fully compatible with all existing code. I basically created a decision function that checks if "username" or "email" was passed in as a parameter, then decided on the appropriate action. All extreme python developers please feel free to boil this down to a single line.

Now you can use two methods to authenticate, remember all imports etc… remain the same. Here are both interfaces you can use simultaneously.

user = authenticate(username=”some_username”, password=”some_password”)

user = authenticate(email=”some@emai.com”, password=”some_password”)

Thats about it, I guess the next step would be for the code to figure out if its an email or a username on the back end and pick the best one… there are pros and cons here.

PS: I’m looking for a really simple and clever way of adding OpenID to my projects. Everything I’ve found so far requires me to re-code either my site or the solution to make it sync up with my existing logins. I really just want a snippet of HTML for the templates and a single backend authentication function. I know Python OpenID libraries come in a separate directory, I want to keep them there.

Oh yeah… I’m posting the source code and templates for Everything A Django Developer Needs To Create Logins converted to new forms next week…

Credit card debt in america
Bad credit loan credit card
Bad credit mortgage loan lender
Home owner personal loan
Payday cash loan in canada
100 bad credit mortgage
Ohio debt consolidation
California home loan mortgage refinancing
Business canada credit repair report
Ameriloan payday loan
Capital one credit card commercial
Citibank corporation loan student
Accelerated debt consolidation
Cheap unsecured personal loan
Citi credit card online
Home loan for people with bad credit
Federal student loan program
California home loan stockton
Calculate credit score
Unsecured business loan bad credit
Consolidation loan service student
Car loan for people with bad credit
Fast loan online payday
Process credit card online
California home loan southern
Visa credit card machine
Arizona bad credit loan mortgage
Home owner secured loan uk
Washington mutual home mortgage loan
Bad credit en language loan
Va home mortgage loan rate
Payday loan in georgia
Student credit card in canada
Bad credit home loan california
Countrywide home loan mortgage
Debt consolidation quote
Bad credit mortgage texas
Home equity loan montana
No credit personal loan
Bad credit personal signature loan
Christian debt consolidation program
Citibank student loan corp
Credit card balance transfer uk
Bankruptcy personal loan
Bank federal home loan
Adjustable rate home loan
Clean credit report
Personal cash loan
Bad credit student personal loan
Current home loan interest rate
Bad credit master card
Cheap payday loan
3 credit report score
Consolidation debt free non profit
Consolidation loan review student
Approval guaranteed loan personal
Bad credit home loan mortgage services
Wireless credit card reader
Payday loan oregon
Top debt consolidation loan
Payday loan business
Georgia home loan refinance
Unsecured credit card debt consolidation
Home equity loan work
Kansas city home equity loan
How to read credit score
Trans union credit report
Fleet credit card pay online
Fargo loan student well
Best home loan rate
Bank federal home loan pittsburgh
Bankruptcy california home loan
Chiropractic consolidation debt loan student
Prepaid student credit card
Home equity loan in florida
Card consolidation credit debt help
Prepaid credit card orchard bank
Bad credit unsecured loan
Washington mutual home loan inc
Credit report trans union
State bank of india credit card
Apply for credit card instantly
Tampa home loan
Rhode island bad credit mortgage
Easy online payday loan
Unsecured personal loan australia
Bad credit need a personal loan
Bad credit mobile home loan
0 apr credit card uk
Bad credit bank loan
Capital one credit card offer
Sallie mae student loan
Free annual credit report government
Federal home improvement loan
Free annual credit report law
Company consolidation loan student
Bad credit mortgage loan uk
125 home equity loan and second mortgage
Best credit card debt help
Aames home loan
Guaranteed high risk personal loan
Credit report help
Unsecured personal loan with poor credit
Gas company credit card
Christian debt consolidation company
Second mortgage home loan
Online credit card processing service
Credit repair software
Buyer first home loan time
Free credit card debt consolidation
Florida mortgage loan debt consolidation
Credit card debt consolidation loan
Debt consolidation information
Refinance federal student loan
How to get a personal loan with bad credit
1 hour payday loan
Bad credit fix
Bad credit credit card approval
Buy a car with bad credit
Bad consolidation credit debt loan unsecured
Visa credit card company
Student loan people
Repair credit report online

Topics: Model Revisions, Tutorial | 10 Comments »

UnicodeDecodeError Exception Fix On Templates

By Paul Kenjora | May 14, 2008

My friend Brian at HelpMeSue.com has found a work around for the dreaded UnicodeDecodeError exception. Here is his fix…

In Brian’s Words…

Using special Spanish characters. Try to load a template with a render_to_response and get a template UnicodeDecodeError exception thrown.

To fix the issue:

  1. Run file on the template:

    file static_page.htm

    That produces: static_page.htm: ISO-8859 text, with very long lines, with CRLF line terminators
  2. Convert the page to utf-8:

    iconv -f ISO-8859-1 -t UTF-8 static_page.htm > new_static.htm

    cp new_static_htm static_page.htm

    file static_page.htm

    That produces: static_page.htm: UTF-8 Unicode text, with very long lines, with CRLF line terminators

And now it all work so Brian’s Spanish template guru is Help Me Sue compatible.

get viagra
discount propecia online
best deals acomplia
clomid prescriptions
acomplia
purchase viagra online
cheap generic viagra
acomplia fda approved
levitra fda
effect viagra
low cost propecia
online buy propecia
cheap cialis online
clomid order
clomid lowest price
levitra canada
viagra online purchase
propecia prescription
cialis sample
acomplia effect
buy clomid on
levitra com
discount generic propecia
levitra pill
acomplia cheap overnight
acomplia sale online
cialis prescription online
online cialis buy
levitra online pharmacy
where cialis line
generic online propecia
levitra prescription online
original propecia
natural propecia
buy clomid generic
clomid sale
viagra dosage
effect levitra
levitra pills sale
buy cialis now
original cialis
suppliers cialis
purchase clomid online
cheapest generic clomid
buy propecia generic
cheapest acomplia
order single cialis
generic clomid
viagra tablet
generic viagra sale
propecia sale price
propecia on line
prescription viagra
get levitra
clomid cost pill
cialis take
generic acomplia
clomid pharmacy
best price acomplia
generic pill clomid
acomplia cost pill
propecia store
buy discount viagra
clomid prescription online
online order levitra
acomplia on line
cheapest cialis
low price propecia
viagra online without prescription
cheap clomid pills
propecia buy
propecia online
cialis pills
order cialis from
viagra drug
clomid tablets sale
buy viagra no prescription
generic pill levitra
cheap generic levitra
cheap discount cialis
best generic viagra
clomid cheap
online pill levitra
buy cheap propecia
discount levitra online
online order acomplia
cialis mail
clomid drug prescription
buy cialis online
viagra information
where clomid line
pills acomplia
levitra sale
cheap clomid online
viagra store
best place cialis
order generic clomid
buy cheap levitra
where to buy clomid
propecia medicine
buy propecia now
propecia pharmacy
cheapest clomid generic
online viagra
acomplia tablets sale
clomid cost
best price cialis
propecia best
buy cheap clomid
cialis store
online levitra where
best generic cialis
online levitra buy
find acomplia
propecia sale cheap
get acomplia
levitra sale cheap
acomplia order
clomid sample
clomid online
half price clomid
viagra
acomplia suppliers
viagra side effects
propecia generic online
levitra on line
generic acomplia cheap
benefits of viagra
cialis
cialis suppliers
levitra sales
suppliers viagra
propecia fda approved
order cialis
cheapest propecia generic
clomid fda
viagra sales
buy viagra
herbal viagra
buy discount cialis
viagra online price
cheap viagra
generic cialis price
cheap acomplia online
cialis generic
acomplia online purchase
propecia information
buying cialis
viagra tablets
cheapest levitra generic
cialis drug interactions
levitra suppliers
online pharmacy viagra
cialis now online
original viagra
cheapest cialis price
suppliers acomplia
propecia online prescription
propecia price comparison
where buy clomid
where order cialis
online pill viagra
buy viagra on line
bayer propecia
propecia sale online
cheapest clomid
propecia drug interactions
clomid now online
levitra price
online clomid
viagra cheapest
best deals propecia
cialis price
clomid com
viagra online
cheap propecia online
viagra sample
free levitra
cheap quality cialis
propecia online discount
cialis fda
levitra drug
clomid suppliers
order reliable clomid
order viagra from
cialis online pharmacy
online pharmacy acomplia
cheapest cialis generic
online propecia
buy discount clomid
propecia online without prescription
buy acomplia online
levitra pharmacy
order single clomid
cialis online ordering
generic propecia price
viagra sale price
propecia alternative
viagra approved
cheap propecia
buy cialis no prescription
clomid online prescription
buy acomplia now
clomid online discount
online viagra where
clomid online sales
generic levitra from
cialis effect
levitra pills
discount cialis
clomid free
cialis canada
levitra cost
acomplia no prescription
propecia sample
buying propecia online
online viagra buy
cialis online price
clomid sales
discount generic clomid
buy propecia
propecia online purchase
viagra sale cheap
best place clomid
buying cialis online
bayer cialis
cialis tabs
buy cialis generic
clomid online pharmacy
viagra without prescription
acomplia online no prescription
bayer levitra
acomplia pill
acomplia price
online buy cialis
viagra effect
buy clomid online
cheap propecia prescription
online order clomid
acomplia tablet
original clomid
levitra online discount
where purchase propecia
no rx levitra
cialis dosage
cheapest propecia price
original levitra
cheapest clomid online
cheapest generic levitra
levitra generic
best price levitra
generic levitra sale
where to buy viagra
discount generic levitra
online acomplia buy
acomplia for sale
levitra tabs
acomplia drug prescription
clomid medication
natural acomplia
cialis price comparison
cheap levitra prescription
clomid online without prescription
cialis side effects
where propecia line
levitra for sale
mg levitra online
viagra online no prescription
viagra best
viagra prescription online
where propecia available
clomid sale online
generic clomid price
bayer acomplia
acomplia mail
generic acomplia price
purchase cialis online
clomid money order
where cheap cialis
where cheap clomid
propecia tablets
buying viagra online
order generic acomplia
where clomid from
levitra buy
best price propecia
buy cheap levitra online
buy propecia cheap
purchase generic propecia
propecia compare
buy levitra generic
where levitra product
find levitra
where purchase acomplia
no rx cialis
cialis tablet
cheap quality levitra
levitra best
discount levitra
best levitra price
where acomplia line
buy generic levitra online
cialis compare
buy propecia no prescription
buy acomplia on line
viagra generic online
propecia prescription online
best deals levitra
viagra tablets sale
cialis where
online order cialis
order propecia online
levitra cheapest
buy generic propecia
levitra compare
cialis online
cheap clomid prescription
purchase acomplia online
acomplia cheapest price
generic clomid sale
cheap quality viagra
viagra pills sale
where purchase cialis
generic cialis online
acomplia buy online
clomid cheap overnight
find viagra
clomid drug interactions
cialis online without prescription
levitra cheap overnight
viagra medicine
online buy viagra
low cost cialis
low price cialis
propecia effect
viagra money order
propecia tablet
cialis drug
propecia approved
cialis tablets
levitra generic online
cialis prescriptions
clomid overnight
acomplia dosage
acomplia side effects
order acomplia from
online prescription levitra
viagra pill
propecia cost
discount generic acomplia
natural levitra
where order levitra
best place propecia
cheap levitra online
generic pill acomplia
buy cheap cialis online
viagra prescriptions
buy cheap acomplia
levitra cost pill
find levitra online
prescription cialis
cheapest levitra price
levitra cheapest price
best cialis price
generic acomplia from
levitra prescriptions
where purchase levitra
propecia cheap overnight
acomplia com
acomplia compare
buy propecia on line
where viagra line
viagra com
buy viagra online
generic cialis
buy online acomplia
acomplia prices
generic propecia sale
clomid tabs
order levitra online
low cost viagra
propecia tabs
cheap quality clomid
buy clomid cheap
online buy clomid
mg viagra online
propecia suppliers
order reliable levitra
pills propecia
buying clomid
online buy levitra
acomplia online price
viagra online buy
buy viagra now
levitra online prescription
best place levitra
propecia lowest price
pills clomid
viagra overnight
where purchase clomid
find clomid
natural viagra
cialis prescription
cheap discount acomplia
discount clomid online
levitra online no prescription
generic pill viagra
cialis prices
levitra lowest price
best generic levitra
suppliers levitra
cialis sale
where order acomplia
levitra sale price
cialis sale price
cheap acomplia
very cheap viagra
viagra sale
acomplia alternative
levitra sample
order propecia
cialis pills sale
acomplia cheapest
propecia fda
where propecia from
acomplia where
purchase propecia
no rx acomplia
buy acomplia cheap
cheap generic cialis
find viagra online
where acomplia from
levitra online
viagra suppliers
online order propecia
generic viagra price
generic information propecia
generic pill propecia
clomid without prescription
very cheap clomid
cialis lowest price
free clomid
acomplia overnight
levitra drug prescription
buy online levitra
cialis sales
purchase generic levitra
generic information viagra
where cheap viagra
clomid online buy
order acomplia
online prescription propecia
cheap generic clomid
propecia online buy
viagra sale online
online pill propecia
levitra prescription
acomplia medicine
cheapest propecia online
viagra cost pill
benefits of levitra
order single acomplia
purchase generic cialis
buy online cialis
clomid price comparison
buy viagra on
viagra cheap overnight
propecia for sale
cheap discount propecia
clomid no prescription
cheap cialis prescription
very cheap levitra
levitra
purchase generic viagra
cialis online discount
cialis cost pill
levitra prices
where viagra from
buy online viagra
acomplia generic
buy acomplia on
clomid for sale
acomplia pills
buy acomplia generic
levitra overnight
find acomplia online
acomplia free
acomplia approved
where viagra available
find clomid online
best generic propecia
natural clomid
cialis discount
purchase generic acomplia
cheapest viagra online
clomid fda approved
propecia now online
viagra online prescription
cheap viagra online
where order viagra
prescription viagra online
very cheap cialis
clomid side effects
viagra where
viagra on line
online pill acomplia
buy clomid now
cialis cheap overnight
order single viagra
cialis money order
cheapest generic acomplia
acomplia cheap
acomplia buy
free acomplia
propecia price
propecia prescriptions
buy online propecia
prescription acomplia
generic information cialis
clomid prescription
viagra now online
viagra prices
where to buy cialis
buy levitra on line
buy generic cialis
clomid generic
prescription propecia online
buy levitra on
certified cialis
buy viagra cheap
no rx clomid
order reliable viagra
generic propecia online
purchase viagra
propecia cheapest price
mg cialis online
best place acomplia
propecia money order
levitra alternative
suppliers clomid
cheap generic propecia
effect propecia
generic levitra
natural cialis
low price levitra
half price viagra
acomplia online ordering
cialis generic online
purchase generic clomid
where levitra line
very cheap acomplia
online pharmacy clomid
cheapest acomplia generic
acomplia sale cheap
mg clomid online
levitra fda approved
best viagra price
cialis tablets sale
buy discount acomplia
clomid approved
cialis without prescription
effect cialis
generic information levitra
levitra tablet
discount viagra
free viagra
viagra buy online
viagra buy
acomplia prescriptions
half price levitra
certified acomplia
discount propecia
clomid cheapest price
cheap clomid
generic online viagra
levitra without prescription
buy levitra online
generic levitra online
clomid buy
buy cialis
new propecia
acomplia best
mg propecia online
buy propecia online
propecia online ordering
cialis best
order single propecia
clomid pills sale
cialis approved
viagra online ordering
cheap quality propecia
clomid alternative
cialis sale online
clomid price
propecia take
benefits of propecia
clomid drug
acomplia online pharmacy
levitra online sales
viagra for sale
certified viagra
purchase clomid
herbal acomplia
levitra drug interactions
order generic viagra
propecia without prescription
online propecia where
buy generic viagra
levitra online buy
buy cialis on line
low cost levitra
viagra mail
levitra tablets
best clomid price
cialis free
levitra online without prescription
order reliable propecia
generic levitra cheap
generic online acomplia
propecia sales
best deals cialis
purchase propecia online
levitra no prescription
acomplia prescription
generic viagra
where purchase viagra
cialis cost
online prescription clomid
cheapest acomplia price
online acomplia where
clomid buy online
where levitra from
levitra money order
clomid medicine
where to buy acomplia
clomid information
order reliable acomplia
herbal propecia
buying acomplia online
acomplia sales
get clomid
viagra drug interactions
acomplia online buy
find propecia online
cialis on line
new cialis
propecia canada
online prescription cialis
cialis com
cialis medication
levitra buy online
propecia sale
where clomid available
online pill clomid
online cialis
generic viagra online
generic information acomplia
viagra tabs
online buy acomplia
cheap viagra prescription
cialis pharmacy
cialis fda approved
acomplia lowest price
online levitra
where to buy levitra
levitra discount
propecia overnight
propecia side effects
cialis cheapest price
buy cheap propecia online
where cialis from
order generic levitra
cheap propecia pills
online propecia buy
acomplia now online
generic propecia
buy generic viagra online
order viagra online
levitra effect
acomplia take
discount generic viagra
buy generic cialis online
viagra medication
benefits of cialis
order viagra
levitra store
best generic acomplia
low price clomid
viagra canada
buy cialis cheap
propecia com
levitra mail
levitra information
viagra no prescription
buy online clomid
cheapest levitra
levitra free
where clomid product
buy generic acomplia
buy clomid on line
best acomplia price
where order clomid
buying viagra
where viagra product
best price viagra
buy cheap cialis
new clomid
viagra take
online pharmacy cialis
certified clomid
buy propecia on
best propecia price
viagra prescription