util.py :  » GUI » Sketch » skencil-0.6.17 » Sketch » Lib » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » GUI » Sketch 
Sketch » skencil 0.6.17 » Sketch » Lib » util.py
# Sketch - A Python-based interactive drawing program
# Copyright (C) 1997, 1998, 1999, 2002, 2003 by Bernhard Herzog
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

#
#  Some useful functions used in various places...
#


import os, string, re, stat

# Return the value of the environment variable S if present, None
# otherwise. In Python 1.5 one might use os.environ.get(S) instead...
def getenv(s):
    if os.environ.has_key(s):
  return os.environ[s]
    return None


# Return the pwd entry for the current user in the format of
# pwd.getpwuid.
def get_pwd():
    import pwd
    user = getenv("USER") or getenv("LOGNAME")
    if not user:
  return pwd.getpwuid(os.getuid())
    else:
  return pwd.getpwnam(user)

# Return the user's home directory. If it can't be determined from the
# environment or from the password database, return the current
# directory.
def gethome():
    try:
  home = getenv("HOME")
  if not home:
      home = get_pwd()[5]
  return home
    except (KeyError, ImportError):
  return os.curdir

# Return the real user name (the gecos field of passwd)
def get_real_username():
    try:
  return get_pwd()[4]
    except:
  return None

# Return the hostname
def gethostname():
    name = getenv('HOSTNAME')
    if not name:
  try:
      import socket
      name = socket.gethostname()
  except:
      pass
    return name


# sh_quote taken almost verbatim from the python standard library with
# the only difference that it doesn't prepend a space
def sh_quote(x):
    """Return a unix shell quoted version of the string x.

    The result is of a form that can be inserted into an argument to
    os.system so that it looks like a single word to the shell.
    """
    # Two strategies: enclose in single quotes if it contains none;
    # otherwise, enclose in double quotes and prefix quotable characters
    # with backslash.
    if '\'' not in x:
        return '\'' + x + '\''
    s = '"'
    for c in x:
        if c in '\\$"`':
            s = s + '\\'
        s = s + c
    s = s + '"'
    return s


#
#  Filename manipulation
#

# return the longest common prefix of path1 and path2 that is a
# directory.
def commonbasedir(path1, path2):
    if path1[-1] != os.sep:
  path1 = path1 + os.sep
    return os.path.split(os.path.commonprefix([path1, path2]))[0]



# return the absolute path PATH2 as a path relative to the directory
# PATH1. PATH1 must be an absoulte filename. If commonbasedir(PATH1,
# PATH2) is '/', return PATH2. Doesn't take symbolic links into
# account...
def relpath(path1, path2):
    if not os.path.isabs(path2):
  return path2
    basedir = commonbasedir(path1, path2)
    if basedir == os.sep:
  return path2
    path2 = path2[len(basedir) + 1 : ]
    curbase = path1
    while curbase != basedir:
  curbase = os.path.split(curbase)[0]
  path2 = os.pardir + os.sep + path2
    return path2


# find a file FILE in one of the directories listed in PATHS. If a file
# is found, return its full name, None otherwise.
def find_in_path(paths, file):
    for path in paths:
  fullname = os.path.join(path, file)
  if os.path.isfile(fullname):
      return fullname

# find one of the files listed in FILES in one of the directories in
# PATHS. Return the name of the first one found, None if no file is
# found.
def find_files_in_path(paths, files):
    for path in paths:
  for file in files:
      fullname = os.path.join(path, file)
      if os.path.isfile(fullname):
    return fullname


# Create the directory dir and its parent dirs when necessary
def create_directory(dir):
    if os.path.isdir(dir):
  return

    parent, base = os.path.split(dir)
    create_directory(parent)
    os.mkdir(dir, 0777)

# Make a backup of FILENAME if it exists by renaming it to its
# backupname (a ~ appended)

class BackupError(Exception):
    def __init__(self, errno, strerror, filename = ''):
  self.errno = errno
  self.strerror = strerror
  self.filename = filename


def make_backup(filename):
    if os.path.isfile(filename):
  backupname = filename + '~'
  try:
      os.rename(filename, backupname)
  except os.error, value:
      raise BackupError(value[0], value[1], backupname)

#
#
#

# Return the current local date and time as a string. The optional
# parameter format is used as the format parameter of time.strftime and
# defaults to '%c'.
# Currently this is used for the CreationTime comment in a PostScript
# file.
def current_date(format = '%c'):
    import time
    return time.strftime(format, time.localtime(time.time()))


#
#
#

#An empty class...
class Empty:
    def __init__(self, **kw):
  for key, value in kw.items():
      setattr(self, key, value)

#
#  List Manipulation
#

from types import ListType
def flatten(list):
    result = []
    for item in list:
  if type(item) == ListType:
      result = result + flatten(item)
  else:
      result.append(item)
    return result


#
#       String Manipulation
#

rx_format = re.compile(r'%\((?P<item>[a-zA-Z_0-9]+)\)'
                       r'\[(?P<converter>[a-zA-Z_]+)\]')

def format(template, converters, dict):
    result = []
    pos = 0
    while pos < len(template):
        match = rx_format.search(template, pos)
        if match:
            result.append(template[pos:match.start()] % dict)
            converter = converters[match.group('converter')]
            item = dict[match.group('item')]
            result.append(converter(item))
            pos = match.end()
        else:
            result.append(template[pos:] % dict)
            pos = len(template)

    return string.join(result, '')

# convert a bitmap to a string containing an xbm file. The linedlg uses
# this for instance to convert bitmap objects to Tk bitmap images.
def xbm_string(bitmap):
    import string
    width, height = bitmap.GetGeometry()[3:5]
    lines = ['#define sketch_width %d' % width,
       '#define sketch_height %d' % height,
       'static unsigned char sketch_bits[] = {']
    lines = lines + bitmap.GetXbmStrings() + ['}', '']
    return string.join(lines, '\n')
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.