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]
mysql
Description: Binary data
_______________________________________________ Func-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/func-list
