Yak Shaving

just me

Archive for June, 2009

A Quick memcache demo for Python

without comments

So you need to use memcache with Python? Below is a brief intro I figured out in about 20 mins.

First install everything you need. I run Ubuntu so python-memcached memcached packages were required.

Next start the memcached server if its not already running:

/usr/bin/memcached -m 64 -p 11211 -u nobody -l 127.0.0.1

The above gets you a 64Mb server, more than enough to play on.

Next some python below is from the interpreter as I was in a hurry:

import memcache
memc = memcache.Client(['127.0.0.1:11211'])
class test():
    def __init__(self):
        self.m = "Hello, world"

t = test()
memc.set('cheese', t, 120)
True
r = memc.get('cheese')
r.m
'Hello, world'

The above instantiates an object and then saves it memcached with set() and then we get it back using get(). Dead simple. The usage is pretty, try and fetch from memcached if if fails fetch from your datasource and then save that document ready for next time.

memc.set(‘cheese’, t, 120) cheese is the reference, t is the object to store and 120 is the time to live. After 120 seconds the object is cleared from the cache.

Written by channam

June 21st, 2009 at 10:47 pm

Posted in Uncategorized

WebDriver for logging into Twitter

without comments

No real reason for choosing Twitter apart from its cool :) .

The code below uses unittest to run. It creates a new WebDriver object and users it to fetch http://twitter.com and submit a username and password. Once the details are added it “clicks” the “Sign In” button to login into Twitter.

#!/usr/bin/env python

import unittest
import logging
from webdriver_firefox.webdriver import FirefoxLauncher
from webdriver_firefox.webdriver import WebDriver

class TwitterTests (unittest.TestCase):

    def test_login_twitter(self):
        driver = WebDriver()
        driver.get("http://twitter.com")

        # find our elements - the html on the page with same ids
        username_element = driver.find_element_by_id('username')
        password_element = driver.find_element_by_id('password')

        # use this to toggle the remember me box
        remember_me_element = driver.find_element_by_id('remember')

        # type into the boxes
        username_element.send_keys('yourusername')
        password_element.send_keys('yourpassword')
        remember_me_element.toggle()

        # click Sign In and we should be logged in
        driver.find_element_by_id('signin_submit').click()

       # check that the title of the page is correct to see if we logged in
        self.assertEqual(driver.get_title(), 'Twitter / Home')

        # Extract from the html using xpath to find username and updates of the people on the screen
        updates = driver.find_elements_by_xpath("//span[@class='entry-content']");
        user = driver.find_elements_by_xpath("//a[@class='screen-name']");

        # display in the terminal the name and the update
        for i,update in enumerate(updates):
            print user[i].get_text() + ": " +update.get_text()

        # uncomment the following to close the window and finish
        #driver.quit()

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO)
    unittest.main()

The docs are not great for WebDriver but reading the source is pretty simple. Being able to mentally parse Java to Python is also a big advantage!

Written by channam

June 20th, 2009 at 1:05 pm

Posted in webdriver

Webdriver and Python Bindings

without comments

I`m working on some WebDriver stuff and below is quick guide to get you started:

svn checkout http://webdriver.googlecode.com/svn/trunk/ webdriver
cd webdriver/
sudo python setup.py install

add the following to make sure you new libs can be found correctly

vi ~/.bashrc
export WEBDRIVER=/home/channam/Code/python/webdriver
. ~/.bashrc

and you are good to go.

Written by channam

June 20th, 2009 at 12:51 pm

Posted in Uncategorized