(file) Return to PythonBinding.c CVS log (file) (dir) Up to [OMI] / omi / scriptext / py

  1 krisbash 1.1 #include "/usr/include/python2.6/Python.h"
  2              #include "MI.h"
  3              #include <string.h>
  4              #include "structmember.h"
  5              #include "PMI_Session.c"
  6              
  7              /*Define a static MI Exception type*/
  8              static PyObject *MIError;
  9              
 10              PyObject* CleanupApplication(MI_DestinationOptions miDestinationOptions,
 11              	MI_Application miApplication, MI_Result miResult) {
 12                  if (miDestinationOptions.ft) {
 13                      MI_DestinationOptions_Delete(&miDestinationOptions);
 14              	}
 15              
 16                  MI_Application_Close(&miApplication);
 17              	char str[80];
 18              	strcpy(str,"MI_Application_NewSession failed, error = ");
 19              	strcat(str,MI_Result_To_String(miResult));
 20                  PyErr_SetString(MIError,str);
 21              	return NULL;
 22 krisbash 1.1 }
 23              
 24              PyObject* CleanupSession(MI_DestinationOptions miDestinationOptions,
 25              	MI_Application miApplication, MI_Result miResult, MI_Session miSession) {
 26                  MI_Session_Close(&miSession, NULL, NULL);
 27                  return CleanupApplication(miDestinationOptions, miApplication, miResult);
 28              }
 29              
 30              static PyObject* Connect(PyObject* self, PyObject* args){
 31              	//initiazlie the python module first
 32              	Py_Initialize();
 33              	initPMI_Session();
 34              	initPMI_Instance();
 35              	initPMI_Class();
 36              	PMI_Session* session = (PMI_Session*) InitSession();
 37              	MI_Application miApplication = MI_APPLICATION_NULL;
 38              	MI_Session miSession = MI_SESSION_NULL;	
 39              	MI_Result miResult;
 40              	MI_DestinationOptions miDestinationOptions = MI_DESTINATIONOPTIONS_NULL;
 41              	MI_UserCredentials miUserCreds = {0};
 42              
 43 krisbash 1.1 	char* domain, *username, *password;
 44              	if(!PyArg_ParseTuple(args,"sss",&domain,&username,&password))
 45              	{
 46              	     PyErr_SetString(MIError,"Connection failed: please input the correct domian, username and password");
 47              	     return NULL;
 48              	}
 49              	
 50                  miUserCreds.authenticationType = MI_AUTH_TYPE_BASIC;
 51                  miUserCreds.credentials.usernamePassword.domain = MI_T(domain);
 52                  miUserCreds.credentials.usernamePassword.username = username;
 53                  miUserCreds.credentials.usernamePassword.password = password;
 54              	
 55              	miResult = MI_Application_Initialize(0, NULL, NULL, &miApplication);
 56              	if (miResult != MI_RESULT_OK)
 57              	{
 58              		PyErr_SetString(MIError,"MI_Application_Initialize failed");
 59              		return NULL;
 60              	}		
 61              
 62              	miResult = MI_Application_NewDestinationOptions(&miApplication, &miDestinationOptions);
 63                  if (miResult != MI_RESULT_OK) 
 64 krisbash 1.1 	{
 65                      return CleanupApplication(miDestinationOptions, miApplication, miResult);
 66              	}
 67              
 68              	miResult = MI_DestinationOptions_AddDestinationCredentials(&miDestinationOptions, &miUserCreds);
 69                  if (miResult != MI_RESULT_OK)
 70                  {
 71              	   return CleanupApplication(miDestinationOptions, miApplication, miResult);
 72              	}
 73              
 74              	miResult = MI_Application_NewSession(&miApplication, NULL, NULL, &miDestinationOptions, NULL, NULL, &miSession);
 75                  if (miResult != MI_RESULT_OK)
 76              	{
 77                      return CleanupApplication(miDestinationOptions, miApplication, miResult);
 78              	}
 79              	/*Make sure the connection is successful */
 80              	miResult = TestConnection(&miSession);
 81              	if(miResult != MI_RESULT_OK)
 82              	{
 83              		PyErr_SetString(MIError,"Connection failed.Check the server status and credentials");
 84              		return NULL;
 85 krisbash 1.1 	}
 86              
 87              	session->miSession = miSession;
 88              	Py_INCREF(session);
 89              	return (PyObject *)session;
 90              }
 91              
 92              
 93              static PyObject *CreateLocalInstance(PyObject *self, PyObject *args, PyObject *kwds)
 94              {
 95              	char *className;
 96              	PyObject *propertyDict;
 97              	PyObject *propertyTypes = NULL;
 98              	PyObject *propertyFlags = NULL;
 99               	static char *kwlist[] = {"className","propertyValues","propertyTypes","propertyFlags",NULL};
100              	if(!PyArg_ParseTupleAndKeywords(args,kwds,"sO!|OO",kwlist,&className,&PyDict_Type, &propertyDict,&propertyTypes,&propertyFlags))
101                  {
102              		PyErr_SetString(MIError,"Please input correct classname and property dictionaries");
103              		return NULL;
104                  }
105              
106 krisbash 1.1     MI_Result miResult;
107                  MI_Application miApplication = MI_APPLICATION_NULL;
108                  MI_Instance *miInstance = NULL;
109              
110              	miResult = MI_Application_Initialize(0, NULL, NULL, &miApplication);
111              	if (miResult != MI_RESULT_OK)
112              	{
113              		PyErr_SetString(MIError,"MI_Application Initialize failed");
114              		return NULL;
115              	}		
116              
117              	miResult = MI_Application_NewInstance(&miApplication,className,NULL,&miInstance);
118              	if(miResult != MI_RESULT_OK)
119              	{
120              		char error[200];
121              		strcpy(error,"Failed to create an instance of class ");
122              		strcat(error,className);
123              		strcat(error,", error = ");
124              		strcat(error,MI_Result_To_String(miResult));
125              		PyErr_SetString(MIError,error);
126              		return NULL;
127 krisbash 1.1 	}
128              	
129              	//Iterate the dictionary and add property values to the instance
130              	PyObject *key, *value;
131              	Py_ssize_t pos = 0;
132              	while (PyDict_Next(propertyDict, &pos, &key, &value))
133              	{
134              		MI_Value miValue;
135                  	MI_Type  miType;
136              		MI_Uint32  miFlag;
137              		char *propertyName;
138              		PyObject *propertyValue;
139              
140              		if(!PyArg_Parse(key,"s",&propertyName))
141              		{
142              			PyErr_SetString(MIError,"Property name is not correct");
143              			return NULL;
144              		}		
145              		if(!PyArg_Parse(value,"O",&propertyValue))
146              		{
147              			PyErr_SetString(MIError,"Property value is not correct");
148 krisbash 1.1 			return NULL;
149              		}
150              		/*If the user doesn't specify property type, set the default type to be string */
151              		if(propertyTypes != NULL)
152              		{	
153              			PyObject *typeValue = PyDict_GetItemString(propertyTypes,propertyName);
154              			if(typeValue != NULL)
155              			{
156              				miType = PyInt_AsLong(typeValue);
157              				SetPropertyValues(miType,propertyValue,&miValue);
158              			}
159              			else
160              			{
161              				/*Need to check if it's datetime object otherwise server always expects interval for datetime object*/
162              				if (PyDateTime_Check(propertyValue) || PyDelta_Check(propertyValue))
163              				{
164              					miType = MI_DATETIME;
165              					SetPropertyValues(miType,propertyValue,&miValue);		
166              				}
167              				else
168              				{
169 krisbash 1.1 	    			miValue.string = PyString_AsString(propertyValue);
170              					miType = MI_STRING;
171              				}
172              			}
173              		}
174              		if(propertyFlags != NULL)
175              		{
176              			PyObject *flagValue = PyDict_GetItemString(propertyFlags,propertyName);
177              			if(flagValue != NULL)
178              			{
179              				long value = PyInt_AsLong(flagValue);
180              				miFlag = (MI_Uint32)value;
181              			}
182              		}
183              		miResult = MI_Instance_AddElement(miInstance,propertyName,&miValue,miType,miFlag);
184              	    
185              		if(miResult != MI_RESULT_OK)
186                  	{
187              			char error[200];
188              			strcpy(error,"MI_Instance_AddElement failed, error =");
189              			strcat(error,MI_Result_To_String(miResult));
190 krisbash 1.1 			PyErr_SetString(MIError,error);
191              			return NULL;
192                  	}
193              	}
194              
195              	PMI_Instance* pmiInstance = (PMI_Instance*) initPMI();
196              	pmiInstance->miInstance = miInstance;		
197              	pmiInstance->propertyValues = propertyDict;		
198              	pmiInstance->propertyTypes = propertyTypes;
199              	pmiInstance->propertyFlags = propertyFlags;
200                 	return (PyObject *)pmiInstance;
201              }
202              
203              void DatetimeToStr(const MI_Datetime* x, _Out_writes_z_(26) MI_Char buf[26])
204              {
205                  if (x->isTimestamp)
206                  {
207                      const MI_Char FMT[] = "%04d%02d%02d%02d%02d%02d.%06d%c%03d";
208                      MI_Sint32 utc = x->u.timestamp.utc;
209              
210                      sprintf(buf,FMT,
211 krisbash 1.1             x->u.timestamp.year,
212                          x->u.timestamp.month,
213                          x->u.timestamp.day,
214                          x->u.timestamp.hour,
215                          x->u.timestamp.minute,
216                          x->u.timestamp.second,
217                          x->u.timestamp.microseconds,
218                          utc < 0 ? '-' : '+',
219                          utc < 0 ? -utc : utc);
220                  }
221                  else
222                  {
223                      const MI_Char FMT[] = "%08u%02u%02u%02u.%06u:000";
224                      sprintf(buf,FMT,
225                          x->u.interval.days,
226                          x->u.interval.hours,
227                          x->u.interval.minutes,
228                          x->u.interval.seconds,
229                          x->u.interval.microseconds);
230                  }
231              }
232 krisbash 1.1 
233              static char* MI_Type_To_String(MI_Type miType)
234              { 
235              	switch (miType)
236                  {
237                  	case MI_BOOLEAN:
238                      {
239              			return "MI_BOOLEAN";
240                      }
241              		case MI_UINT8:
242              		{
243              			return "MI_UINT8";
244              		}
245                      case MI_SINT8:
246              		{
247              			return "MI_SINT8";
248              		}  
249              		case MI_UINT16:
250              		{
251              			return "MI_UINT16";
252              		}
253 krisbash 1.1         case MI_SINT16:
254              		{
255              			return "MI_SINT16";
256              		}  
257              		case MI_UINT32:
258              		{
259              			return "MI_UINT32";
260              		}
261                      case MI_SINT32:
262              		{
263              			return "MI_SINT32";
264              		}  
265              		case MI_UINT64:
266              		{
267              			return "MI_UINT64";
268              		}
269                      case MI_SINT64:
270              		{
271              			return "MI_SINT64";
272              		}  
273              		case MI_REAL32:
274 krisbash 1.1 		{
275              			return "MI_REAL32";
276              		}
277              		case MI_REAL64:
278              		{
279              			return "MI_REAL64";
280              		}
281              		case MI_CHAR16:
282              		{
283              			return "MI_CHAR16";
284              		}
285              		case MI_DATETIME:
286              		{
287              			return "MI_DATETIME";
288              		}
289              		case MI_STRING:
290              		{
291              			return "MI_STRING";		
292              		}
293              		case MI_REFERENCE:
294              		{
295 krisbash 1.1 			return "MI_REFERENCE";
296              		}
297              		case MI_INSTANCE:
298              		{
299              			return "MI_INSTANCE";
300              		}
301              		case MI_BOOLEANA:
302              		{
303              			return "MI_BOOLEANA";
304              		}
305              		case MI_UINT8A:
306              		{
307              			return "MI_UINT8A";
308              		}
309                      case MI_SINT8A:
310              		{
311              			return "MI_SINT8A";
312              		}  
313              		case MI_UINT16A:
314              		{
315              			return "MI_UINT16A";
316 krisbash 1.1 		}
317                      case MI_SINT16A:
318              		{
319              			return "MI_SINT16A";
320              		}  
321              		case MI_UINT32A:
322              		{
323              			return "MI_UINT32A";
324              		}
325                      case MI_SINT32A:
326              		{
327              			return "MI_SINT32A";
328              		}  
329              		case MI_UINT64A:
330              		{
331              			return "MI_UINT64A";
332              		}
333                      case MI_SINT64A:
334              		{
335              			return "MI_SINT64A";
336              		}  
337 krisbash 1.1 		case MI_REAL32A:
338              		{
339              			return "MI_REAL32A";
340              		}
341              		case MI_REAL64A:
342              		{
343              			return "MI_REAL64A";
344              		}
345              		case MI_CHAR16A:
346              		{
347              			return "MI_CHAR16A";
348              		}
349              		case MI_DATETIMEA:
350              		{
351              			return "MI_DATETIMEA";
352              		}
353              		case MI_STRINGA:
354              		{
355              			return "MI_STRINGA";		
356              		}
357              		case MI_REFERENCEA:
358 krisbash 1.1 		{
359              			return "MI_REFERENCEA";
360              		}
361              		case MI_INSTANCEA:
362              		{
363              			return "MI_INSTANCEA";
364              		}
365              	}
366              	return "";
367              }
368              
369              //forward declaration
370              void Print_Element_Value( const MI_Value *elementValue, MI_Type elementType, size_t level);
371              
372              void Indent(size_t level)
373              {
374              	size_t n = level *4;
375              	while(n--)
376              		PySys_WriteStdout(" ");
377              }
378              
379 krisbash 1.1 /* Print an element */
380              void Print_Element(
381                  const MI_Char *elementName, 
382                  const MI_Value *elementValue, 
383                  MI_Type elementType, 
384                  MI_Uint32 elementFlags, 
385                  size_t level)
386              {
387                  Indent(level);
388                  PySys_WriteStdout("%s [%s", elementName, MI_Type_To_String(elementType));
389              
390                  if (elementFlags & MI_FLAG_KEY)
391                  {
392                      PySys_WriteStdout(", MI_FLAG_KEY");
393                  }
394              
395                  if ((elementFlags & MI_FLAG_NULL) || (elementValue == NULL))
396                  {
397                      PySys_WriteStdout(", NULL]");
398                      return;
399                  }
400 krisbash 1.1     else 
401                  {
402                      PySys_WriteStdout("] ");
403              
404                      Print_Element_Value(elementValue, elementType, level);
405                  }
406              }
407              
408              
409              
410              void Dump_MI_Instance(MI_Instance *miInstance, MI_Boolean keysOnly, size_t level)
411              {
412              	if(miInstance == NULL)
413              	{
414              		PyErr_SetString(MIError,"MI_Instance is null");
415              		return;
416              	}
417              
418              	MI_Uint32 elementCount;
419                  MI_Result miResult;
420                  MI_Uint32 elementIndex;
421 krisbash 1.1 
422                  miResult = MI_Instance_GetElementCount(miInstance, &elementCount);
423                  if (miResult != MI_RESULT_OK)
424                  {
425                      PyErr_SetString(MIError,"MI_Instance_GetElementCount failed");
426                  }
427                  Indent(level);
428                  PySys_WriteStdout("Class %s\n", miInstance->classDecl->name);
429                  Indent(level);     
430              	PySys_WriteStdout("{\n");
431                  Indent(level);
432              
433                  for (elementIndex = 0; elementIndex != elementCount; elementIndex++)
434                  {
435                      const MI_Char *elementName;
436                      MI_Value elementValue;
437                      MI_Type elementType;
438                      MI_Uint32 elementFlags;
439              
440                      miResult = MI_Instance_GetElementAt(miInstance, elementIndex, &elementName, &elementValue, &elementType, &elementFlags);
441                      if (miResult != MI_RESULT_OK)
442 krisbash 1.1         {
443                          PyErr_SetString(MIError,"MI_Instance_GetElementCount failed");
444                      }
445                      if ((keysOnly && (elementFlags & MI_FLAG_KEY)) || 
446                          !keysOnly)
447                      {
448                          Print_Element(elementName, &elementValue, elementType, elementFlags, level+1);
449                          PySys_WriteStdout("\n");
450                      }
451                  }
452                  Indent(level);
453                  PySys_WriteStdout("}\n");
454              }
455              
456              void Print_Element_Value(
457                  const MI_Value *elementValue, 
458                  MI_Type elementType, 
459                  size_t level)
460              {
461                      switch (elementType)
462                      {
463 krisbash 1.1             case MI_BOOLEAN:
464                          {
465                              PySys_WriteStdout("%s", elementValue->boolean ? "True" : "False");
466                              break;
467                          }
468                          case MI_SINT8:
469                          {
470                              PySys_WriteStdout("%hd", elementValue->sint8);
471                              break;
472                          }
473                          case MI_UINT8:
474                          {
475                              PySys_WriteStdout("%hu", elementValue->uint8);
476                              break;
477                          }
478                          case MI_SINT16:
479                          {
480                              PySys_WriteStdout("%d", elementValue->sint16);
481                              break;
482                          }
483                          case MI_UINT16:
484 krisbash 1.1             {
485                              PySys_WriteStdout("%u", elementValue->uint16);
486                              break;
487                          }
488                          case MI_SINT32:
489                          {
490                              PySys_WriteStdout("%i", elementValue->sint32);
491                              break;
492                          }
493                          case MI_UINT32:
494                          {
495                              PySys_WriteStdout("%u", elementValue->uint32);
496                              break;
497                          }
498                          case MI_SINT64:
499                          {
500                              PySys_WriteStdout("%lld", elementValue->sint64);
501                              break;
502                          }
503                          case MI_UINT64:
504                          {
505 krisbash 1.1                 PySys_WriteStdout("%llu", elementValue->uint64);
506                              break;
507                          }
508                          case MI_REAL32:
509                          {
510                              PySys_WriteStdout("%g", elementValue->real32);
511                              break;
512                          }
513                          case MI_REAL64:
514                          {
515                              PySys_WriteStdout("%lg", elementValue->real64);
516                              break;
517                          }
518                          case MI_CHAR16:
519                          {
520                              PySys_WriteStdout("%u", elementValue->char16);
521                              break;
522                          }
523                          case MI_DATETIME:
524                          {
525                              MI_Char buf[26];
526 krisbash 1.1                 DatetimeToStr(&elementValue->datetime, buf);
527                              PySys_WriteStdout("%s", buf);
528                              break;
529                          }
530                          case MI_STRING:
531                          {
532                              PySys_WriteStdout("%s", elementValue->string);
533                              break;
534                          }
535                          case MI_BOOLEANA:
536                          {
537                              MI_Uint32 i;
538                              MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
539              
540                              PySys_WriteStdout("{");
541              
542                              for (i = 0; i < elementValue->booleana.size; i++)
543                              {
544                                  MI_Value value;
545                                  value.boolean = elementValue->booleana.data[i];
546                                  Print_Element_Value(&value, nonArrayType, level);
547 krisbash 1.1                     if (i + 1 != elementValue->datetimea.size)
548                                      PySys_WriteStdout(", ");
549                              }
550                              PySys_WriteStdout("}");
551                              break;
552                          }
553                          case MI_SINT8A:
554                          {
555                              MI_Uint32 i;
556                              MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
557              
558                              PySys_WriteStdout("{");
559              
560                              for (i = 0; i < elementValue->sint8a.size; i++)
561                              {
562                                  MI_Value value;
563                                  value.sint8 = elementValue->sint8a.data[i];
564                                  Print_Element_Value(&value, nonArrayType, level);
565                                  if (i + 1 != elementValue->datetimea.size)
566                                      PySys_WriteStdout(", ");
567                              }
568 krisbash 1.1                 PySys_WriteStdout("}");
569                              break;
570                          }
571                          case MI_UINT8A:
572                          {
573                              MI_Uint32 i;
574                              MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
575              
576                              PySys_WriteStdout("{");
577              
578                              for (i = 0; i < elementValue->uint8a.size; i++)
579                              {
580                                  MI_Value value;
581                                  value.uint8 = elementValue->uint8a.data[i];
582                                  Print_Element_Value(&value, nonArrayType, level);
583                                  if (i + 1 != elementValue->datetimea.size)
584                                      PySys_WriteStdout(", ");
585                              }
586                              PySys_WriteStdout("}");
587                              break;
588                          }
589 krisbash 1.1             case MI_SINT16A:
590                          {
591                              MI_Uint32 i;
592                              MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
593              
594                              PySys_WriteStdout("{");
595              
596                              for (i = 0; i < elementValue->sint16a.size; i++)
597                              {
598                                  MI_Value value;
599                                  value.sint16 = elementValue->sint16a.data[i];
600                                  Print_Element_Value(&value, nonArrayType, level);
601                                  if (i + 1 != elementValue->datetimea.size)
602                                      PySys_WriteStdout(", ");
603                              }
604                              PySys_WriteStdout("}");
605                              break;
606                          }
607                          case MI_UINT16A:
608                          {
609                              MI_Uint32 i;
610 krisbash 1.1                 MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
611              
612                              PySys_WriteStdout("{");
613              
614                              for (i = 0; i < elementValue->uint16a.size; i++)
615                              {
616                                  MI_Value value;
617                                  value.uint16 = elementValue->uint16a.data[i];
618                                  Print_Element_Value(&value, nonArrayType, level);
619                                  if (i + 1 != elementValue->datetimea.size)
620                                      PySys_WriteStdout(", ");
621                              }
622                              PySys_WriteStdout("}");
623                              break;
624                          }
625                          case MI_SINT32A:
626                          {
627                              MI_Uint32 i;
628                              MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
629              
630                              PySys_WriteStdout("{");
631 krisbash 1.1 
632                              for (i = 0; i < elementValue->sint32a.size; i++)
633                              {
634                                  MI_Value value;
635                                  value.sint32 = elementValue->sint32a.data[i];
636                                  Print_Element_Value(&value, nonArrayType, level);
637                                  if (i + 1 != elementValue->datetimea.size)
638                                      PySys_WriteStdout(", ");
639                              }
640                              PySys_WriteStdout("}");
641                              break;
642                          }
643                          case MI_UINT32A:
644                          {
645                              MI_Uint32 i;
646                              MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
647              
648                              PySys_WriteStdout("{");
649              
650                              for (i = 0; i < elementValue->uint32a.size; i++)
651                              {
652 krisbash 1.1                     MI_Value value;
653                                  value.uint32 = elementValue->uint32a.data[i];
654                                  Print_Element_Value(&value, nonArrayType, level);
655                                  if (i + 1 != elementValue->datetimea.size)
656                                      PySys_WriteStdout(", ");
657                              }
658                              PySys_WriteStdout("}");
659                              break;
660                          }
661                          case MI_SINT64A:
662                          {
663                              MI_Uint32 i;
664                              MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
665              
666                              PySys_WriteStdout("{");
667              
668                              for (i = 0; i < elementValue->sint64a.size; i++)
669                              {
670                                  MI_Value value;
671                                  value.sint64 = elementValue->sint64a.data[i];
672                                  Print_Element_Value(&value, nonArrayType, level);
673 krisbash 1.1                     if (i + 1 != elementValue->datetimea.size)
674                                      PySys_WriteStdout(", ");
675                              }
676                             PySys_WriteStdout("}");
677                              break;
678                          }
679                          case MI_UINT64A:
680                          {
681                              MI_Uint32 i;
682                              MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
683              
684                              PySys_WriteStdout("{");
685              
686                              for (i = 0; i < elementValue->uint64a.size; i++)
687                              {
688                                  MI_Value value;
689                                  value.uint64 = elementValue->uint64a.data[i];
690                                  Print_Element_Value(&value, nonArrayType, level);
691                                  if (i + 1 != elementValue->datetimea.size)
692                                      PySys_WriteStdout(", ");
693                              }
694 krisbash 1.1                 PySys_WriteStdout("}");
695                              break;
696                          }
697                          case MI_REAL32A:
698                          {
699                              MI_Uint32 i;
700                              MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
701              
702                              PySys_WriteStdout("{");
703              
704                              for (i = 0; i < elementValue->real32a.size; i++)
705                              {
706                                  MI_Value value;
707                                  value.real32 = elementValue->real32a.data[i];
708                                  Print_Element_Value(&value, nonArrayType, level);
709                                  if (i + 1 != elementValue->datetimea.size)
710                                      PySys_WriteStdout(", ");
711                              }
712                              PySys_WriteStdout("}");
713                              break;
714                          }
715 krisbash 1.1             case MI_REAL64A:
716                          {
717                              MI_Uint32 i;
718                              MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
719              
720                              PySys_WriteStdout("{");
721              
722                              for (i = 0; i < elementValue->real64a.size; i++)
723                              {
724                                  MI_Value value;
725                                  value.real64 = elementValue->real64a.data[i];
726                                  Print_Element_Value(&value, nonArrayType, level);
727                                  if (i + 1 != elementValue->datetimea.size)
728                                      PySys_WriteStdout(", ");
729                              }
730                              PySys_WriteStdout("}");
731                              break;
732                          }
733                          case MI_CHAR16A:
734                          {
735                              MI_Uint32 i;
736 krisbash 1.1                 MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
737              
738                              PySys_WriteStdout("{");
739              
740                              for (i = 0; i < elementValue->char16a.size; i++)
741                              {
742                                  MI_Value value;
743                                  value.char16 = elementValue->char16a.data[i];
744                                  Print_Element_Value(&value, nonArrayType, level);
745                                  if (i + 1 != elementValue->datetimea.size)
746                                      PySys_WriteStdout(", ");
747                              }
748                              PySys_WriteStdout("}");
749                              break;
750                          }
751                          case MI_DATETIMEA:
752                          {
753                              MI_Uint32 i;
754                              MI_Type nonArrayType = (MI_Type) (elementType & (~MI_ARRAY));
755              
756                              PySys_WriteStdout("{");
757 krisbash 1.1 
758                              for (i = 0; i < elementValue->datetimea.size; i++)
759                              {
760                                  MI_Value value;
761                                  value.datetime = elementValue->datetimea.data[i];
762                                  Print_Element_Value(&value, nonArrayType, level);
763                                  if (i + 1 != elementValue->datetimea.size)
764                                      PySys_WriteStdout(", ");
765                              }
766                              PySys_WriteStdout("}");
767                              break;
768                          }
769                          case MI_STRINGA:
770                          {
771                              MI_Uint32 i;
772              
773                              PySys_WriteStdout("{");
774              
775                              for (i = 0; i < elementValue->stringa.size; i++)
776                              {
777                                  MI_Char *value;
778 krisbash 1.1                     value = elementValue->stringa.data[i];
779                                  PySys_WriteStdout(value);
780                                  if (i + 1 != elementValue->stringa.size)
781                                      PySys_WriteStdout(", ");
782                              }
783                             PySys_WriteStdout("}");
784                              break;
785                          }
786                          case MI_INSTANCE:
787                          {
788                              MI_Instance* inst = elementValue->instance;
789              
790                              Dump_MI_Instance(inst, MI_FALSE, level);
791                              break;
792                          }
793                          case MI_REFERENCE:
794                          {
795                              MI_Instance* inst = elementValue->reference;
796              
797                              PySys_WriteStdout(" REF ");
798              
799 krisbash 1.1                 Dump_MI_Instance(inst, MI_TRUE, level);
800                              break;
801                          }
802                          case MI_INSTANCEA:
803                          {
804                              const MI_InstanceA* inst = &elementValue->instancea;
805                              MI_Uint32 i;
806              
807                              PySys_WriteStdout("\n");
808              
809                              Indent(level);
810                              PySys_WriteStdout("{\n");
811              
812                              for (i = 0; i < inst->size; i++)
813                              {
814                                  Dump_MI_Instance(inst->data[i], MI_TRUE, level + 1);
815                              }
816              
817                              Indent(level);
818                              PySys_WriteStdout("}");
819              
820 krisbash 1.1                 break;
821                          }
822                          case MI_REFERENCEA:
823                          {
824                              const MI_InstanceA* inst = &elementValue->instancea;
825                              MI_Uint32 i;
826              
827                              PySys_WriteStdout(" REF ");
828              
829                              PySys_WriteStdout("\n");
830              
831                              Indent(level);
832                              PySys_WriteStdout("{\n");
833              
834                              for (i = 0; i < inst->size; i++)
835                              {
836                                  Dump_MI_Instance(inst->data[i], MI_FALSE, level + 1);
837                              }
838              
839                              Indent(level);
840                              PySys_WriteStdout("}");
841 krisbash 1.1 
842                              break;
843                          }
844                          default:
845                              break;
846                      }
847              }
848              
849              
850              
851              static PyObject *Print(PyObject *self,PyObject *args)
852              {
853              	PyObject *instance;
854              	if(!PyArg_ParseTuple(args,"O",&instance))
855                  {
856              		PyErr_SetString(MIError,"Please input correct MI_Instance");
857              		return NULL;
858                  }
859              	PMI_Instance *pmiInstance = (PMI_Instance *)instance;
860              	MI_Instance *miInstance;
861              	if(pmiInstance != NULL && (PyObject_Compare((PyObject *)pmiInstance,Py_None)))
862 krisbash 1.1 	{	
863              		miInstance = pmiInstance->miInstance;
864              	}
865              	else
866              	{
867              		PyErr_SetString(MIError,"MI_Instance cannot be null!");
868              		return NULL;
869              	}
870              
871              	Dump_MI_Instance(miInstance,MI_FALSE,0);
872              	Py_INCREF(Py_None);
873              	return Py_None;
874              }
875              
876              static PyMethodDef mi_funcs[] = {
877              	{"connect",(PyCFunction)Connect,METH_VARARGS,NULL},
878              	{"create_local_instance",(PyCFunction)CreateLocalInstance,METH_VARARGS|METH_KEYWORDS,NULL},
879              	{"print_instance",(PyCFunction)Print,METH_VARARGS,NULL},
880              	{NULL}
881              };
882              
883 krisbash 1.1 void initmi(void) {
884              	PyObject *m;
885              	m = Py_InitModule3("mi", mi_funcs, "MI module that wraps up the MI operation from client API");
886              	/*Add the exception type to the module */
887              	MIError = PyErr_NewException("mi.error",NULL,NULL);
888              	Py_INCREF(MIError);
889              	PyModule_AddObject(m,"MIError",MIError);
890              
891              	/*enum types */
892              	PyModule_AddIntConstant(m, "BOOLEAN",0);
893              	PyModule_AddIntConstant(m,"UINT8",1);
894              	PyModule_AddIntConstant(m, "SINT8",2);
895              	PyModule_AddIntConstant(m,"UINT16",3);
896              	PyModule_AddIntConstant(m,"SINT16",4);
897              	PyModule_AddIntConstant(m, "UINT32",5);
898              	PyModule_AddIntConstant(m,"SINT32",6);
899              	PyModule_AddIntConstant(m, "UINT64",7);
900              	PyModule_AddIntConstant(m,"SINT64",8);
901              	PyModule_AddIntConstant(m,"REAL32",9);
902              	PyModule_AddIntConstant(m, "REAL64",10);
903              	PyModule_AddIntConstant(m,"CHAR16",11);
904 krisbash 1.1 	PyModule_AddIntConstant(m, "DATETIME",12);
905              	PyModule_AddIntConstant(m,"STRING",13);
906              	PyModule_AddIntConstant(m,"REFERENCE",14);
907              	PyModule_AddIntConstant(m, "INSTANCE",15);
908              	PyModule_AddIntConstant(m,"BOOLEANA",16);
909              	PyModule_AddIntConstant(m, "UINT8A",17);
910              	PyModule_AddIntConstant(m,"SINT8A",18);
911              	PyModule_AddIntConstant(m,"UINT16A",19);
912              	PyModule_AddIntConstant(m, "SINT16A",20);
913              	PyModule_AddIntConstant(m,"UINT32A",21);
914              	PyModule_AddIntConstant(m, "SINT32A",22);
915              	PyModule_AddIntConstant(m,"UINT64A",23);
916              	PyModule_AddIntConstant(m,"SINT64A",24);
917              	PyModule_AddIntConstant(m, "REAL32A",25);
918              	PyModule_AddIntConstant(m,"REAL64A",26);
919              	PyModule_AddIntConstant(m, "CHAR16A",27);
920              	PyModule_AddIntConstant(m,"DATETIMEA",28);
921              	PyModule_AddIntConstant(m,"STRINGA",29);
922              	PyModule_AddIntConstant(m,"REFERENCEA",30);
923              	PyModule_AddIntConstant(m,"INSTANCEA",31);
924              
925 krisbash 1.1 	/*CIM meta types */
926              	PyModule_AddIntConstant(m,"FLAG_CLASS",1 << 0);
927              	PyModule_AddIntConstant(m,"FLAG_METHOD",1 << 1);
928              	PyModule_AddIntConstant(m,"FLAG_PROPERTY",1 << 2);
929              	PyModule_AddIntConstant(m,"FLAG_PARAMETER", 1 << 3);
930              	PyModule_AddIntConstant(m,"FLAG_ASSOCIATION",1 << 4);
931              	PyModule_AddIntConstant(m,"FLAG_INDICATION", 1 << 5);
932              	PyModule_AddIntConstant(m,"FLAG_REFERENCE", 1 << 6);	
933              	PyModule_AddIntConstant(m,"FLAG_ANY",1|2|4|8|16|32|64);
934              	
935              	/*Qualifier flavors */
936              	PyModule_AddIntConstant(m,"FLAG_ENABLEOVERRIDE",1 << 7);	
937              	PyModule_AddIntConstant(m,"FLAG_DISABLEOVERRIDE",1 << 8);
938              	PyModule_AddIntConstant(m,"FLAG_RESTRICTED",1 << 9);
939              	PyModule_AddIntConstant(m,"FLAG_TOSUBCLASS",1 << 10);
940              	PyModule_AddIntConstant(m,"FLAG_PARAMETER", 1 << 11);
941              
942              	/*Select boolean qualifiers */
943              	PyModule_AddIntConstant(m,"FLAG_KEY",1 << 12);
944              	PyModule_AddIntConstant(m,"FLAG_IN",1 << 13);
945              	PyModule_AddIntConstant(m,"FLAG_OUT",1 << 14);
946 krisbash 1.1 	PyModule_AddIntConstant(m,"FLAG_REQUIRED",1 << 15);
947              	PyModule_AddIntConstant(m,"FLAG_STATIC", 1 << 16);
948              	PyModule_AddIntConstant(m,"FLAG_ABSTRACT",1 << 17);
949              	PyModule_AddIntConstant(m,"FLAG_TERMINAL",1 << 18);
950              	PyModule_AddIntConstant(m,"FLAG_EXPENSIVE",1 << 19);
951              	PyModule_AddIntConstant(m,"FLAG_STREAM",1 << 20);
952              	PyModule_AddIntConstant(m,"FLAG_READONLY", 1 << 21);
953              	
954              	/* Special flags */
955              	PyModule_AddIntConstant(m,"FLAG_NOT_MODIFIED",1 << 25);
956              	PyModule_AddIntConstant(m,"FLAG_VERSION",1<<26|1<<27|1<<28);
957              	PyModule_AddIntConstant(m,"FLAG_NULL",1 << 29);
958              	PyModule_AddIntConstant(m,"FLAG_BORROW",1 << 30);
959              	PyModule_AddIntConstant(m,"FLAG_ADOPT", 1 << 31);
960              }
961              

ViewCVS 0.9.2