Here you will find the Func mysql Module 0.05 :
25,26c25,26
< __version__ = "0.0.5"
< __api_version__ = "0.0.5"
---
> __version__ = "0.0.4"
> __api_version__ = "0.0.4"
28c28
< __creation_date__ = "03/24/2009"
---
> __creation_date__ = "03/12/2009"
34d33
< import re
36d34
< import StringIO
46,47c44,45
< version = "0.0.5"
< api_version = "0.0.5"
---
> version = "0.0.4"
> api_version = "0.0.4"
218,222d215
< i = 0
< j = 0
< results_array = []
< temporary_results_array = []
< p = re.compile("\x00")
234,248c227
< results_number = len(results)
< temporary_results = results[0]
< temporary_results_number = len(temporary_results)
< for i in range(0,(results_number - 1)):
< temporary_results = results[i]
< temporary_results_number = len(temporary_results)
< for j in range(0,(temporary_results_number)):
< results = temporary_results[j]
< result_string =StringIO.StringIO()
< result_string.write(results)
< results = result_string.getvalue()
< result_string.close()
< temporary_results_array.append(results)
< results_array.append(temporary_results_array)
< queryresults = results_array
---
> queryresults=results[0]BR Frederic On Tue, Mar 24, 2009 at 12:01 PM, Frederic Hornain <[email protected]>wrote: > 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] > -- ----------------------------------------------------- Fedora-ambassadors-list mailing list [email protected] Olpc mailing list [email protected]
mysql.py
Description: Binary data
_______________________________________________ Func-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/func-list
