die Seilerwerks

Chronicling Life, Love, Linux and Oracle database administration.

Posts Tagged ‘python

Moto RAZR + Bluetooth + Linux + Python = ObexCopier

with 7 comments

While in Schaumburg, Illinois last week for the Oracle DBA Workshop II, I was taking some photos on my Motorola RAZR camera phone, in the hopes of posting them for my 5-year-old daughter to see. I needed to clear up some misconceptions, since she was under the impression that I “sleep at the school.” I soon learned, however, that transferring photos from the RAZR one-at-a-time over bluetooth to my Fedora 8 laptop became tedious, and waiting for a response from the GUI file browser was just frustrating. Enter: ObexFTP.

Thanks to a tip from a friend, I found ObexFTP and, in my quest to force myself to learn python, set about crafting a script to do the following:

  • Transfer files based on a date (default to today).
  • Transfer all files in the directory.

So I’m presenting to you my first stab at it. Some of the hard-codings depend on how the RAZR stores photos in the micro-SD card. If anyone wants to submit enhancements or critiques, I’m all ears. Right now it just works for what I needed it to do.

#!/usr/bin/env python

# Don Seiler, don@seiler.us 

import obexftp, ConfigParser, os
from xml.etree.ElementTree import XML
from optparse import OptionParser
from datetime import date

# This script is dependent on the Moto Razr convention of naming
# pictures in an MM-DD-YYYY_XXXX.jpg format

# Users need to create ~/.obexcopier.ini with these variables defined
# [ObexCopier]
# device = 1A:2B:3C:4D:5E:6F
# channel = 6
# source_dir = /MMC(Removable)/motorola/shared/picture
# dest_dir = /media/pictures

# Read config from ~/.obexcopier.ini
config = ConfigParser.ConfigParser()
config.read(os.path.expanduser('~/.obexcopier.ini'))

# Probably a waste of precious memory to store these again
device = config.get('ObexCopier','device')
channel = config.getint('ObexCopier','channel')
source_dir = config.get('ObexCopier','source_dir')
dest_dir = config.get('ObexCopier','dest_dir')

# Get today for default date
today = date.today().strftime("%m-%d-%y")

# Command-line handling to allow for date
parser = OptionParser()
parser.add_option("-d", "--date", dest="date", default=today, help="Grab pictures from this date, defaults to today [default: %default]",metavar="MM-DD-YY")
parser.add_option("-a", "--all", action="store_true", dest="all", default=False, help="Copy all files, regardless of date [default: %default]")
(options, args) = parser.parse_args()

# Connect to the client
print "Connecting to %s on channel %d" % (device, channel)
cli = obexftp.client(obexftp.BLUETOOTH)
cli.connect(device, channel)

# Get the list of files from the SD card picture dir
if options.all:
        print "Copying all files to disk"
else:
        print "Copying files from %s" % options.date

files_xml = cli.list(source_dir)
folder_listing = XML(files_xml)
files = folder_listing.findall('./file/')
for file in files:
        # Only handle pictures taken on the specified date
        if options.all or file.get('name').startswith(options.date):
                print "Copying %s" % file.get('name')
                data = cli.get(source_dir + '/' + file.get('name'))
                localfile = open(dest_dir + '/' + file.get('name'), 'wb')
                localfile.write(data)
                localfile.close()

# Disconnect and delete the client
cli.disconnect()
cli.delete

Written by Don Seiler

March 25, 2008 at 12:18 pm

Posted in linux

Tagged with , , , , ,

python + cx_Oracle = <3

with one comment

Took some time over the past two days to deliberately use python. Much fun was had by all (where all = me).

My first creation used the subprocess module (although I had to install the older separate version since I’m on python 2.3) to call df over ssh and then again locally to make sure that my disk partitions were large enough to hold an rman duplication. Works like a champ, and hopefully I won’t have long-running duplications blow up and page me at 2 AM. Subprocess is a really nice module for making system calls as well, I’ll let you play around with it before thanking me.

My second creation used the cx_Oracle module to connect to Oracle as the SYSDBA and do some post-duplication tasks for my development databases. Changing flags to note that it isn’t production, granting some more privileges to the developers, etc. Thanks to Anthony Tuininga for answering my newbie emails.

Written by Don Seiler

October 19, 2007 at 3:25 pm

Posted in Uncategorized

Tagged with ,

ATTN Python Lovers: A New cx_Oracle Awaits You!

with one comment

The Oracle extension of choice for python, cx_Oracle has come out with a new release. Release notes are fun reading, as always.

For the unwashed masses (from their homepage):

cx_Oracle is a Python extension module that allows access to Oracle databases and conforms to the Python database API specification.

Makes me realize how I wish I could find more stuff to use python in. Most of my reporting is done in perl, and not worth converting. Most of my maintenance scripts (rman, etc.) are bash scripts calling the Oracle executables themselves.

Also be thankful that the Hoff is there in case you have fat fingers!

Written by Don Seiler

March 8, 2007 at 8:52 am

Posted in Uncategorized

Tagged with , , ,

python + oracle == <3

leave a comment »

Finally got around to installing the lib for . Since my sandbox at work is only 3 (to be as close to prod 3 as possible), I only have python 2.2, so I needed to build/install from source. Sadly, I didn’t realize how trivial this was, but it’s done now, and I can further my python fanboidom AND play with Oracle at the same time.

To quote : THANK YOU, GOD.

Written by Don Seiler

October 20, 2006 at 8:49 am

Posted in Uncategorized

Tagged with ,

Follow

Get every new post delivered to your Inbox.