analitics

Pages

Saturday, August 17, 2013

Working with PEP 8 conventions ...

I am wrote my own python scripts to long time ago and now I saw many of this scripts are a mess  in terms of PEP criteria.
What is the pep criteria? The PEP describing style guidelines for the C code in the C implementation of Python.
If you using Blender 3D/Python development  then you need to follow the PEP 8.
The PEP 8 and can be found here and the authors are: Guido van Rossum , Barry Warsaw and Nick Coghlan.
Today I will show you a brief listing of pep8 criteria:
-indentation of 4 spaces not use tabs
-camel caps for class names: MyClass , AnotherClass
-all lower case underscore separated module names: my_module, another_module
-use explicit imports, not importing '*'
-imports should usually be on separate lines, not import os,sys
-adding whitespace around the operators , not 1+2 or 7+ 3
-don't use spaces around the = sign , not a = b +1
-use single quotes for enums, and double quotes for strings
-each line of a block comment starts with a # and a single space
-don't make comments that contradict the code
-if you want to writing good documentation strings then follow the PEP 257 conventions.
-run checks for pep8 compliance
# <pep8 compliant=""></pep8>
-and enable line length checks use this instead
# <pep8-80 compliant=""></pep8-80>
-don't use multiple statements on the same line, like:
if foo == 'test': do_test_thing()
one_test(); two_test()
... this is the correct way:
if foo == 'test':
    do_test_thing()
one_test()
two_test()
Also you can read about Blender 3D/Python and PEP 8 best practice here.

Saturday, August 10, 2013

Fix python error: SyntaxError: Non-ASCII character.

This can be fix easy ... just add the below line at top of the python file:
# coding: utf-8
You will see now something like this error:
SyntaxError: invalid syntax
... but also will be point to the bad encoding character with : ^
For example I had this:
usertest@home:~$ python sunet.py 
  File "sunet.py", line 22
    def  __init__ ( self , a , b , c ) :
                                 ^
SyntaxError: invalid syntax

How to deal with environment variables using python script.

Any OS like Linux, Unix, Windows has environment variables.

Also any variables which must not be committed on a public code can be used in this way.

You can give this variables to your application.

Let's see one simple example about how to do that:

import os
ENV_VAR = os.environ.get("ENV_VAR", None)
if not ENV_VAR:
        print "not ENV_VAR"
if ENV_VAR:
        print "yes ! is ENV_VAR"

Now you can give this ENV_VAR to the script or not. See next...

usertest@home:~$ ENV_VAR=true python demo-env.py 
yes ! is ENV_VAR
usertest@home:~$ python demo-env.py 
not ENV_VAR

With Python 3 on Unix, environment variables are decoded using the file system encoding.

Tuesday, July 30, 2013

The new pygobject come with version 3.9.5 .

GObject is a object system used by GTK+, GStreamer and other libraries.

The new PyGObject 3.9.5 provides a convenient wrapper for use in Python programs when
accessing GObject libraries.

The news come from Simon Feltman - pygtk digest: I am pleased to announce version 3.9.5 of the Python bindings for
GObject. This is the third release of the 3.9.x series which will
eventually result in the stable 3.10 release for GNOME 3.10.

The new release is available from ftp.gnome.org.

Wednesday, July 24, 2013

Using python module webkit and gtk to make one simple webbrowser.

Today I will show you a simple example with webkit python module.

I will make one simple browser using this two python modules.

Read the full tutorial here.

The result can be see in the next image:

Sunday, July 14, 2013

Selenium python module and links.

Just see my old tutorial to run the selenium module.
NOTE: If your script not run when you try to login then use python shell :P
Now add the next source code to see the links and some infos.
links = browser.find_elements_by_partial_link_text('')
for link in links:
    print link.get_attribute("href")

Saturday, July 13, 2013

Selenium python module and cookies.

Today I will show how to deal with cookies and Firefox.

Selenium Python Client Driver is a Python language binding for Selenium Remote Control.

You can read more about this module here.

You can find some examples , but most of webpages working with cookies.So let's make one simple tutorial.

The next source code is very simple and most of the python users knows what means.


$ python 
Python 2.7.3 (default, Jan  2 2013, 16:53:07) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from selenium import webdriver
>>> from selenium.common.exceptions import NoSuchElementException
>>> from selenium.webdriver.common.keys import Keys
>>> browser = webdriver.Firefox()
>>> browser.get("http://facebook.com/")
>>> browser.get("http://facebook.com/home.php")

The next source codes will get your cookies from the webpage.

>>> for cookie in browser.get_cookies():
...     print(cookie['name'] + ' --> your cookie data ' + cookie['value'])
... 
datr --> your cookie data 
locale --> your cookie data 
xs --> your cookie data 
s --> your cookie data 
lu --> your cookie data 
fr --> your cookie data 
csm --> your cookie data 
c_user --> your cookie data 
act --> your cookie data 
x-src --> your cookie data 
sub --> your cookie data 
p --> your cookie data 
presence --> your cookie data 
>>> 

You can deal with all functions of selenium python module , see :

>>> dir(browser)
['NATIVE_EVENTS_ALLOWED', '__class__', '__delattr__', '__dict__', '__doc__', 
'__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__'
, '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__'
, '__subclasshook__', '__weakref__', '_is_remote', '_unwrap_value', '_wrap_value'
, 'add_cookie', 'application_cache', 'back', 'binary', 'capabilities', 'close', 
'command_executor', 'create_web_element', 'current_url', 'current_window_handle'
, 'delete_all_cookies', 'delete_cookie', 'desired_capabilities', 'error_handler'
, 'execute', 'execute_async_script', 'execute_script', 'find_element', 
'find_element_by_class_name', 'find_element_by_css_selector', 'find_element_by_id'
, 'find_element_by_link_text', 'find_element_by_name', 'find_element_by_partial_link_text'
, 'find_element_by_tag_name', 'find_element_by_xpath', 'find_elements', 
'find_elements_by_class_name', 'find_elements_by_css_selector', 'find_elements_by_id',
 'find_elements_by_link_text', 'find_elements_by_name', 'find_elements_by_partial_link_text'
 , 'find_elements_by_tag_name', 'find_elements_by_xpath', 'firefox_profile', 'forward',
  'get', 'get_cookie', 'get_cookies', 'get_screenshot_as_base64', 'get_screenshot_as_file'
  , 'get_window_position', 'get_window_size', 'implicitly_wait', 'is_online', 
  'maximize_window', 'name', 'orientation', 'page_source', 'profile', 'quit', 'refresh'
  , 'save_screenshot', 'session_id', 'set_page_load_timeout', 'set_script_timeout', 
  'set_window_position', 'set_window_size', 'start_client', 'start_session', 'stop_client'
  , 'switch_to_active_element', 'switch_to_alert', 'switch_to_default_content', 
  'switch_to_frame', 'switch_to_window', 'title', 'window_handles']

This module can be a way for you to testing your webpages , save cookie , restore and more...

Also , if you know networking development also you can use scapy module to test more.

I hope will like this simple tutorial about python.

Monday, July 8, 2013

Using findContours from OpenCV python module.

Today I will show something nice about OpenCV Analysis and Shape Descriptors.

This function finds contours in a binary image.

All detected contours is stored as a vector of points for each contour.


#!/usr/bin/python2.7
import cv2
im = cv2.imread('your_image.jpg')
img_gray = cv2.cvtColor(im,cv2.COLOR_RGB2GRAY)
ret,thresh = cv2.threshold(img_gray,127,255,0)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(im,contours,-1,(250,250,250),2)
cv2.imshow('your_image.jpg',im)
cv2.waitKey()
cv2.destroyAllWindows()

If you got this error:

findContours error 'support only 8uC1 images'

then the main reason it's findContours requires a monochrome image.

Let's see the result of the python script.


The contour it's draw with 250,250,250 color.

Friday, June 21, 2013

Simple way to find your script under linux.

Many python users have a lot of scripts.

They use some words for classes or some functions.

Sometime is hard to remember where it's this scripts.

So the easy way to do that is to find the script where is some words.

For example you need to find this : word_in_your_script

To do that just see next linux command:

$ find ~/ -type f -iname "*.py" -exec grep -l 'word_in_your_script' {} \;

Thursday, June 13, 2013

What you need : stdout or print ?

My question is much more complicated than intended and I will show you in this tutorial.

Most users use print or print() - if it used in python 3.

For example you can use this without import any python module.

$ python 
Python 2.6.8 (unknown, Apr 14 2013, 18:10:41) 
[GCC 4.3.2 20081105 (Red Hat 4.3.2-7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "my text"
my text
>>> 

This is simple to show some strings.

What the most people don't know about print function it's the interface of stdout.write.

Let's see another example with stdout.write .

>>> sys.stdout.write(str(my text) + '\n')   
  File "<stdin>", line 1
    sys.stdout.write(str(my text) + '\n')
                               ^
SyntaxError: invalid syntax
>>> sys.stdout.write(str("my text") + '\n')                  
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined

First error tells us about function str.It's need just one arg not this my text.

The next error tells us about sys module is not import by python.

Note: This restriction can help us sometime.

Some example using stdout.write :

First is : my text example , see I add '\n' to go to the next row.

>>> import sys 
>>> sys.stdout.write("my text"+'\n')
my text

Let's try to change the output.

See the next image :

You can say : I can do this with print function.

>>> print "\033[0;32m"+"my text"+"\033[0m"
my text

Yes! Right. Can you do this ? (see the next video)


Wednesday, May 15, 2013

Use python to render scene in Blender 3D.

The python script is very simple.

I used my scene with Mickey Mouse (my boy like this funny cartoon).

This is the python script.

import bpy
bpy.context.scene.render.use_border = False
bpy.context.scene.render.use_crop_to_border = False
bpy.ops.render.render()
R="Render Result"
bpy.data.images[R].save_render("/home/your_username/test_render.png")

See the output image:


The next source code it's used for border and crop.

Only if you want to use it.

bpy.context.scene.render.use_border = False
bpy.context.scene.render.use_crop_to_border = False

Also you can use this to set resolution percentage.

For example if you want to render just 10% of resolution use this:

bpy.context.scene.render.resolution_percentage =10

Saturday, March 23, 2013

Using fnmatch python module ...

The module fnmatch provides support for Unix shell-style wildcards, which are not the same as regular expressions.

Why , because the special characters used are : * , ? , [seq] , [!seq] .

This is default example from fnmach website.


>>> for file in os.listdir('.'):
...  if fnmatch.fnmatch(file, '*.txt'):
...   print file
... 
tableta.txt
verf.txt
a.txt
python-modules.txt
untitled.txt
resetbios.txt
>>> 

Now I want to show you another way to use this module.

Using Blender with multiple objects and python script can be very hard way.

For example if you have many objects or one matrix of objects create manually or with some scripts the named object is like in the next image:


Just use the fnmatch to sort this objects.

>>> import bpy 
>>> import fnmatch

Now get all meshes objects.

>>> all_objects = bpy.data.objects

Put names of all meshes as a list of strings.

>>> list_all_objects= [all_objects[i].name for i in range(len(all_objects))]

Use the python module fnmatch to filter the name of objects.

>>> new_list_objects = fnmatch.filter(list_all_objects, 'Cube.*')]

Now you can use this new list to make some change. I use print to show test the list.

>>> print(new_list_objects)
['Cube.001', 'Cube.002', 'Cube.003'

The goal of fnmatch module in Blender 3D can be use one module to make list of objects and enables searching for files given a file name pattern.

It's two features in one module.

Also this python module can be used to get some

>>> regular_expression_txt = fnmatch.translate('*.txt')
>>> regular_expression_txt
'.*\\.txt\\Z(?ms)'
>>> print(regular_expression_txt)
.*\.txt\Z(?ms)

Just remove \Z(?ms) and use it.

I try to use some regular expression and seam working well.

Saturday, March 2, 2013

Simple way to reverse strings

Just see the next source code:

>>> text='0123456789'
>>> reverse_text=text[::-1]
>>> print reverse_text
9876543210
>>>