@@ -71,7 +71,8 @@ function VarIsSubtypeOf(const ADerived, AType : Variant): Boolean;
7171function VarIsNone (const AValue : Variant): Boolean;
7272function VarIsTrue (const AValue : Variant): Boolean;
7373
74- function VarModuleHasObject (const AModule : Variant; aObj: AnsiString): Boolean;
74+ function VarModuleHasObject (const AModule : Variant; const aObj: AnsiString): Boolean;
75+ function VarHasAttr (const AValue: Variant; const AAttr: AnsiString): Boolean;
7576
7677function NewPythonList ( const ASize : Integer = 0 ): Variant;
7778function NewPythonTuple ( const ASize : Integer ): Variant;
@@ -570,15 +571,22 @@ function VarIsTrue(const AValue : Variant): Boolean;
570571 Result := AValue; // the cast into a boolean will call the PyObject_IsTrue API.
571572end ;
572573
573- function VarModuleHasObject (const AModule : Variant; aObj: AnsiString): Boolean;
574+ function VarModuleHasObject (const AModule : Variant; const aObj: AnsiString):
575+ Boolean;
574576begin
575577 with GetPythonEngine do
576- Result := VarIsPython(AModule) and
577- PyModule_Check(ExtractPythonObjectFrom(AModule)) and
578+ Result := VarIsPythonModule(AModule) and
578579 Assigned(PyDict_GetItemString(
579580 PyModule_GetDict(ExtractPythonObjectFrom(AModule)),PAnsiChar(aObj)));
580581end ;
581582
583+ function VarHasAttr (const AValue: Variant; const AAttr: AnsiString): Boolean;
584+ begin
585+ with GetPythonEngine do
586+ Result := VarIsPython(AValue) and
587+ (PyObject_HasAttrString(ExtractPythonObjectFrom(AValue), PAnsiChar(AAttr)) = 1 );
588+ end ;
589+ 582590function NewPythonList ( const ASize : Integer = 0 ): Variant;
583591var
584592 _list : PPyObject;
0 commit comments