Metadata-Version: 1.0
Name: vlib
Version: 0.9
Summary: vlib core libraries
Home-page: https://github.com/dlink/vlib
Author: David Link
Author-email: dvlink@gmail.com
License: GNU General Public License (GPL)
Description: Python Application Development - Core Library Classes
        
        Developed over a period of time to address reoccurring requirements for most all applications.  It provides the following modules:
        
        ## Modules
        
           * Configuration File Support
        
           * Database Support
        
           * Logging Support (with email Support)
        
           * Object-like (dot) syntax for Dictionaries
        
           * Utilities
        
        ## Details
        
        ### Configuration Module
        
        
        The configuration module reads yaml files and provides a dot syntax for expressing nested data trees.  ie. self.conf.database.hostname.
            
               Usage:
               
                  # To create a singleton instance of configuration data
                  # found in a yaml file pointed to by an environment
                  # variable called VCONF
                  #
                  # eq.:
                  # $ export VCONF=$HOME/proj/conf/dev.yml
        
                  from vlib import conf
                  myconf = conf.getInstance()
        
                  # Print configuration data, from a Yaml file that looks
                  # like this:
                  #
                  # crew:
                  #   captian: Kirk
                  #   science_officer: Spock
        
                  print myconf.crew.captian
        
                  # Real world example with Objects
                  
                  from vlib import conf
                  class Foo(object):
                      def __init__(self):
                          self.conf = conf.getInstance()
                          self.webserver = self.conf.webserver
                          self.dbname    = self.conf.db.name
                          ...
        ### Database Module
        
        The database modules provides a simple set of methods for talking to your database, like query(), startTransaction(), commit(), etc.
        
              Usage:
        
                  # To setup the Db instance, you need to define the following
                  # in your config file pointed to by the VCONF environement var.
                  # The db module uses the conf module to read this information
                  #
                  # database:
                  #    engine: mysql
                  #    host: localhost
                  #    db: vlibtests
                  #    user: vlibtests
                  #    passwd: bogangles
                  
                  from vlib import db
                  mydb = db.getInstance()
                  
                  for row in mydb.query('select * from product_types'):
                     print row['product_type_id']
                     print row['name']
                     
                  # Without using config
                  
                  from vlib import Db
                  mydb = Db({'engine':'mysql', 
                             'host':'db1', 
                             'db':'books',                 
                             'user':'bookmgr', 
                             'passwd':'mepassword', 
                             'dictcursor':True })
                             
                 # Real world example with Objects
                 
                 from vlib import db
        
                 class Books(object):
        
                     def __init__(self):
                         self.db = db.getInstance()
        
                     def getBook(self, book_id):
                        sql = 'select * from books where book_id = %s' % book_id
                        results = self.db.query(sql)
                        if results:
                           return results[0]
                        return []
        
        ### Logging Module
        
        The logging module uses log4r to produce consistent log entries that include date, hostname, and class name.
        
             Usage:
        
                  # To setup a Logging instance, you define the following in yuor
                  # config file.  The logging module uses the conf module to read it.
                  #
                  # logging:
                  #    filename: /var/log/myapp/myapp.log
                  #    level: DEBUG
                   
                  # If you want the logger to email you on 'critical' you need 
                  # define email server
                  #
                  # email:                                                                          
                  #    server  : smtp.gmail.com:587                                                 
                  #    username: mailerbot@mycompany.com                                   
                  #    password: secret                                                    
                  #    fromaddr: Myapp Admin mailerbot@mycompany.com                         
                   
                  from vlib import logger
                            
                  class MyClass:
                   
                     def __init__(self):
                        self.logger = logger.getLogger(self.__class__.__name__)
                       
                     def do_something(self):
                        self.logger.debug('Started doing something')
                        self.logger.info('Did Something')
                        self.logger.warn('Warning')
                        self.logger.error('Did not do something')
                         
                        # The following we send email:                                          
                        # self.logger.critical('Something bad happened')    
                         
                  MyClass().do_something()
        
        The above outputs to the log:
        
            2014-02-24 14:41:30	dev1.localdomain	DEBUG	MyClass	Started MyClass.do_something()
            2014-02-24 14:41:30	dev1.localdomain	INFO	MyClass	Did Something
            2014-02-24 14:41:30	dev1.localdomain	WARNING	MyClass	Warning
            2014-02-24 14:41:30	dev1.localdomain	ERROR	MyClass	Did not do something
        
        
        ### Object Dictionary
        
        The **odict** class is syntactic sugar for dealing with dictionaries and nested dictionaries. It privides dot (.) sytax, as well as flower brace ({}) and squre braces ([]) syntax
        
            attr['color'] = 'blue' # normal dict
        
            attr.color = 'blue'    # odict
        
        Example 1: This code using dicts …
        
            picture  = {'name'    : 'The Card Players',
                        'filename': 'cezanne2.jpg',
                        'year'    : 1895}
            print img(src=picture['filename'])
        
        Can be written like this:
        
            from vlib.odict import odict
            picture  = odict(name     = 'The Card Players',
                             filename = 'cezanne2.jpg',
                             year     = 1895)
            print img(src=picture.filename)
        
        
        Nested Odicts Example:
        
            from vlib.odict import odict
            workflow = odict(processes=odict(max_processes=5, debug=False))
            for p in workflow.processes.max_processes:
                startHandler(workflow.processes.debug)
        
        ### Utilities
        
            pretty(X):
                Return X formated nicely for the console
        
            str2datetime(s, format="%Y-%m-%d %H:%M:%S"):
                Convert str in the form of "2010-11-11 17:39:52" or
                                           "2010-11-11"          to a
                datetime.datetime Object
        
            str2date(s):
                Convert str in the form of "2010-11-11" to a
                datetime.date Object
        
            format_datetime(d, with_seconds=False, format=None):
                Given a datetime object
                Return formated String as follows:
        
                   Format: None   : 11/22/2013 01:46[:00] am
                           ISO8601: 2013-11-21T01:46:00-05:00 (EST)
        
            format_date(d):
                Given a datetime object
                Return a string in the form of "mm/dd/yyyy"
        
            table2csv(data):
                Give a LIST or TUPLE
                Return: A CSV table as STRING or the input data if not LIST or TUPLE
        
            list2csv(data):
                Given a Table of data as a LIST of LISTs
                Return in CSV format as a STR
        
            formatdict(d, width=console_width(), indent=0, keylen=0, color=False):
                Recursively format contents of dictionaries in sorted tabular order.
                Optionally a certain width, indented, and/or a specific key length.
        
                >>> utils.formatdict(batch_item)
                        active: 1
                      batch_id: 3250
                      on_press: None
                      order_id: 2007372
                     page_list: None
                           qty: 2
                  removed_date: None
        
            uniqueId(with_millisec=False):
                Return system time to the millisec as set of numbers
        
            shift(alist):
                shift the firt element off of an array and return it
        
            valid_email(email):
                Given an email address
                Return whether it is in valid format as BOOLEAN
        
        
        
        ## Installation
        
        __Ubuntu__
        
        Update apt-get to the latest libraries:
        
            apt-get update
        
        Install pip, if you haven't done so already:
        
             apt-get install python-pip
             pip install -U pip
        
        Install Mysql DB Connectorm, if you haven't done so already:
        
            apt-get install python-dev libmysqlclient-dev
            pip install MySQL-python
        
        Install vweb:
        
            pip install vlib
        
Platform: UNKNOWN
