Here you will find the Func mysql Module 0.04 :

25,26c25,26
< __version__ = "0.0.4"
< __api_version__ = "0.0.4"
---
> __version__ = "0.0.2"
> __api_version__ = "0.0.2"
44,45c44,45
<     version = "0.0.4"
<     api_version = "0.0.4"
---
>     version = "0.0.2"
>     api_version = "0.0.2"
135,137d134
<     def __mysql_commit(self):
<        self.connection.commit()
<
219d215
<             self.__mysql_commit()


BR
Frederic

On Tue, Mar 17, 2009 at 2:39 PM, Frederic Hornain <[email protected]>wrote:

> Here you will find the Func mysql Module 0.0.2 :
>
>  diff mysql.py mysql.py.17Mar2009.bkp
> 35a36
> > from certmaster.config import read_config
> 37a39
> > from func.minion import sub_process
> 42,43c44,45
> <     version = "0.0.2"
> <     api_version = "0.0.2"
> ---
> >     version = "0.0.1"
> >     api_version = "0.0.1"
>
> BR
> Fred
>
>
> On Mon, Mar 16, 2009 at 8:31 AM, Frederic Hornain <[email protected]>wrote:
>
>> Adrian,
>>
>> As soon as I have an hour today, I will create a script in order to have
>> validate test cases.
>> Keep you in touch.
>>
>> BR
>> Frederic
>>
>>
>> On Fri, Mar 13, 2009 at 2:59 AM, Adrian LIkins <[email protected]>wrote:
>>
>>> Frederic Hornain wrote:
>>>
>>>> Dear *,
>>>>
>>>> Here you will find enclosed my Func MySQL Module. OK it could be better
>>>> and smart coded but indeed I am not basically a developer.
>>>> So Thanks in advance for you indulgence.
>>>>
>>>> The aim of that module is to interact with MySQL databases on minions.
>>>> For my part I am going to use it to save retrieve data from minions and 
>>>> save
>>>> it on the database.
>>>> I am going to develop another module to do that.
>>>>
>>>   Neat.
>>>
>>>
>>>  BTW, some functions are not working correctly for the moment due to
>>>> minor problems mentionned in my previous post : "How to save options and
>>>> options in config"
>>>> FYI, Adian is currently working on it
>>>>
>>>   Yup, that needs to be fixed. I got distracted today and didn't finish
>>> tracking it down. Somewhere, the module conf
>>> is properly loading the contents of the moudle config file, and using the
>>> defaults from the module instead.
>>>
>>>  The function which are working for the moment.
>>>> func "localhost.localdomain" call mysql query "show tables;"
>>>> func "localhost.localdomain" call mysql query "create table t (col
>>>> char(1));"
>>>> func "localhost.localdomain" call mysql simple_query
>>>> func "*" call mysql show_config
>>>>
>>>> Let's hope it is enough as module description.
>>>>
>>>> Let's go to the configuration file :
>>>> /etc/func/modules/Mysql.conf
>>>>
>>>> //////////////////////////////////////////////////////////////////////////////
>>>> [main]
>>>> password =
>>>> user = root
>>>> server = localhost
>>>> database = test
>>>>
>>>> Rem1 : it use default MySQL credential. Do not remember if the database
>>>> test is created at the package installation. If not use the "create 
>>>> database
>>>> test;"
>>>> Rem2 : For non MySQL DBA ->
>>>>
>>>>    * yum install mysql
>>>>    * service mysqld start
>>>>    * mysql -u root
>>>>    * mysql promt > show databases
>>>>    * - if no test database
>>>>    * mysql promt > create database test;
>>>>    * mysql promt > quit
>>>>
>>>>
>>>> Let's go to the code :
>>>> /usr/lib/python2.5/site-packages/func/minion/modules/mysql.py
>>>>
>>>> ///////////////////////////////////////////////////////////////////////////////////////////////
>>>>
>>>> #
>>>> # Copyright 2009, Frederic Hornain
>>>> # Frederic Hornain <[email protected] <mailto:[email protected]>>
>>>> #
>>>> # This program is free software; you can redistribute it and/or modify
>>>> # it under the terms of the GNU General Public License as published by
>>>> # the Free Software Foundation; either version 2 of the License, or
>>>> # (at your option) any later version.
>>>> #
>>>> # This program 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 General Public License for more details.
>>>> #
>>>> # You should have received a copy of the GNU General Public License
>>>> # along with this program; if not, write to the Free Software
>>>> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
>>>> # 02110-1301  USA
>>>>
>>>> """
>>>> Func MySQL SQL statement module
>>>> """
>>>>
>>>> __author__ = "Frederic Hornain <[email protected] <mailto:
>>>> [email protected]>>"
>>>>
>>>> __version__ = "0.0.1"
>>>> __api_version__ = "0.0.1"
>>>> __description__ = "Func MySQL SQL statement module"
>>>> __creation_date__ = "03/12/2009"
>>>>
>>>> import func_module
>>>> import time
>>>> import sys
>>>> import service
>>>> import MySQLdb
>>>> import exceptions
>>>> from certmaster.config import read_config
>>>> from func.commonconfig import FuncdConfig
>>>> from certmaster.config import BaseConfig, Option, IntOption,
>>>> FloatOption, BoolOption
>>>> from func.minion import sub_process
>>>>
>>>> class Mysql(func_module.FuncModule):
>>>>
>>>>    # Update these if need be.
>>>>    version = "0.0.1"
>>>>    api_version = "0.0.1"
>>>>    description = "Func MySQL SQL statement module"
>>>>    cursor = ""
>>>>    connection = ""
>>>>
>>>>    class Config(BaseConfig):
>>>>        user = Option('')
>>>>        password = Option('')
>>>>        server = Option('')
>>>>        database = Option('')
>>>>
>>>>    def __mysql_error_code(self,rc):
>>>>        if rc == 0:
>>>>            result = "No Error"
>>>>    elif rc == 1:
>>>>            result = "No MySQL deamon is running on the default MySQL
>>>> port"
>>>>        elif rc == 2:
>>>>            result = "No MySQL user, password, server, database have been
>>>> set in /etc/func/modules/Mysql.conf"
>>>>        elif rc == 3:
>>>>            result = "Opening MySQL Connection Failed"
>>>>        elif rc == 4:
>>>>            result = "SQL Statement Failed"
>>>>        elif rc == 5:
>>>>            result = "Closing MySQL Cursor Failed"
>>>>        elif rc == 6:
>>>>            result = "Closing MySQL Connection Failed"
>>>>        elif rc > 6:
>>>>            result = "Unknown Error"
>>>>        return result
>>>>
>>>>    def __mysql_config(self):
>>>>        if self.options.user == '' or self.options.server == '' or
>>>> self.options.database == '':
>>>>            return 2
>>>>        else:
>>>>            return 0
>>>>
>>>>    def __mysql_service_status(self):
>>>>        mysql_service = service.Service()
>>>>        deamon_status = mysql_service.status("mysqld")
>>>>        if deamon_status == 0:
>>>>            return 0
>>>>        else:
>>>>            return 1
>>>>
>>>>    def __mysql_open_connection(self,rc):
>>>>        if rc == 0:
>>>>            rc = self.__mysql_service_status()
>>>>        if rc == 0:
>>>>            rc = self.__mysql_config()
>>>>        if rc == 0:
>>>>            try:
>>>>                self.connection = MySQLdb.connect (host =
>>>> self.options.server,
>>>>                user = self.options.user,
>>>>                passwd = self.options.password,
>>>>                db = self.options.database)
>>>>            except MySQLdb.Error, e:
>>>>                rc = 3
>>>>        return rc
>>>>
>>>>    def __mysql_query(self,query,rc):
>>>>        h = 0
>>>>        i = 0
>>>>        k = 0
>>>>        records = []
>>>>        try:
>>>>            self.cursor = self.connection.cursor()
>>>>            self.cursor.execute(query)
>>>>            while (1):
>>>>                row = self.cursor.fetchone()
>>>>                if row == None:
>>>>                    break
>>>>                elementnumber=len(row)
>>>>                k = elementnumber-1
>>>>                for i in range(elementnumber):
>>>>                    if row[i] is None:
>>>>                         if i == h :
>>>>                             followingelements = row[:k]
>>>>                             row = ('none',) + followingelements
>>>>                 elif i > h and i < k:
>>>>                             previouselements = row[:i]
>>>>                             followingelements = row[i:k]
>>>>                             row = previouselements + ('none',) +
>>>> followingelements
>>>>                         elif i == k:
>>>>                             previouselements = row[:i]
>>>>                             row = previouselements + ('none',)
>>>>                records.append(row)
>>>>        except MySQLdb.Error, e:
>>>>            rc = 4
>>>>        return (records,rc)
>>>>
>>>>    def __mysql_close_cursor(self,rc):
>>>>        try:
>>>>            self.cursor.close()
>>>>        except MySQLdb.Error, e:
>>>>            rc = 5          return rc
>>>>
>>>>    def __mysql_close_connection(self,rc):
>>>>        try:
>>>>            self.connection.close()
>>>>    except MySQLdb.Error, e:
>>>>            rc = 6
>>>>        return rc
>>>>
>>>>    def show_config(self):
>>>>        """
>>>>        Returns the options config
>>>>        """
>>>>        return self.options
>>>>
>>>>    def change_user(self,changeduser):
>>>>        setattr(self.options,"user",changeduser)
>>>>        self.save_config()
>>>>        return self.options
>>>>
>>>>    def change_password(self,changedpassword):
>>>>        setattr(self.options,'password',changedpassword)
>>>>        self.save_config()
>>>>        return self.options
>>>>
>>>>    def change_server(self,changedserver):
>>>>        setattr(self.options,'server',changedserver)
>>>>        self.save_config()
>>>>        return self.options
>>>>
>>>>    def change_database(self,changeddatabase):
>>>>        setattr(self.options,'database',changeddatabase)
>>>>        self.options.database = changeddatabase
>>>>    self.database = self.options.database
>>>>    self.Config.database = Option(changeddatabase)
>>>>    self.save_config()
>>>>        return self.options
>>>>
>>>>    def return_database(self):
>>>>        return getattr(self.options, 'database')
>>>>
>>>>    def clear_config(self):
>>>>        self.options.user = "root"
>>>>        self.options.password = ""
>>>>        self.options.server = "localhost"
>>>>        self.options.database = "test"
>>>>        self.save_config()
>>>>        return self.options
>>>>
>>>>    def simple_query(self):
>>>>        rc = 0
>>>>        query="SELECT VERSION();"
>>>>        rc = self.__mysql_open_connection(rc)
>>>>        if rc == 0:
>>>>            result = self.__mysql_query(query,rc)
>>>>            if result[1] == 0:
>>>>                rc = self.__mysql_close_cursor(rc)
>>>>            else:
>>>>                simplequeryresult = self.__mysql_error_code(rc)
>>>>            if rc == 0:
>>>>                rc = self.__mysql_close_connection(rc)
>>>>  if rc == 0:
>>>>                    simplequeryresult=result[0]
>>>>                else:
>>>>                    simplequeryresult = self.__mysql_error_code(rc)
>>>>            else:
>>>>                simplequeryresult = self.__mysql_error_code(rc)
>>>>        else:
>>>>            simplequeryresult = self.__mysql_error_code(rc)
>>>>        return simplequeryresult
>>>>              def query(self,query):
>>>>        rc = 0
>>>>        rc = self.__mysql_open_connection(rc)
>>>>        if rc == 0:
>>>>            results = self.__mysql_query(query,rc)
>>>>            if results[1] == 0:
>>>>                rc = self.__mysql_close_cursor(rc)
>>>>            else:
>>>>                queryresults = self.__mysql_error_code(rc)
>>>>            if rc == 0:
>>>>                rc = self.__mysql_close_connection(rc)
>>>>                if rc == 0:
>>>>                    queryresults=results[0]
>>>>                else:
>>>>                    queryresults = self.__mysql_error_code(rc)
>>>>            else:
>>>>                queryresults = self.__mysql_error_code(rc)
>>>>        else:
>>>>            queryresults = self.__mysql_error_code(rc)
>>>>        return queryresults
>>>>
>>>>
>>>> ////////////////////////////////////////////////////////////////////
>>>> EOF
>>>>
>>>> Feel free to send me your comment.
>>>>
>>>
>>> Module looks good, though I haven't tested it yet. Do you have any test
>>> cases or unit tests for it? (I know it's kind
>>> of a pain to test since it needs test mysql running...). But I wouldn't
>>> mind something to put in the unittests, even if
>>> it is kind of a "run at your own risk, this will create/destroy
>>> dbs/tables" thing.
>>>
>>> Adrian
>>>
>>>
>>
>>
>> --
>> -----------------------------------------------------
>> Fedora-ambassadors-list mailing list
>> [email protected]
>>  Olpc mailing list
>> [email protected]
>>
>
>
>
> --
> -----------------------------------------------------
> Fedora-ambassadors-list mailing list
> [email protected]
> Olpc mailing list
> [email protected]
>



-- 
-----------------------------------------------------
Fedora-ambassadors-list mailing list
[email protected]
Olpc mailing list
[email protected]

Attachment: mysql
Description: Binary data

_______________________________________________
Func-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/func-list

Reply via email to