mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Python adjustments (#7809)
* #7797 Well Targets: Add scripting capability * #7794 Python : Do not update childField or childFieldArray * #7797: Python - Add scripting to well path collection - Extend the pdmobject.py with method add_object() - allow objects to be created from Python in well path collections - add well targets to modelled well path * #7795 Python : Make sure referenced generated classes are defined * #7810 StimPlanModel: clean-up python generation * Python : Always use empty string as default value for ptrFieldValue It can happen that a ptrField is assigned to a pointer on object construction. (FaciesProperties) Make sure that constructor always assigns an empty string. Co-authored-by: magnesj <magnesj@users.noreply.github.com> Co-authored-by: Kristian Bendiksen <kristian.bendiksen@gmail.com>
This commit is contained in:
@@ -61,9 +61,9 @@ class PdmObjectFactory;
|
||||
class PdmCodeGenerator
|
||||
{
|
||||
public:
|
||||
virtual QString generate( PdmObjectFactory* factory ) const = 0;
|
||||
virtual QString generate( PdmObjectFactory* factory, std::vector<QString>& errorMessages ) const = 0;
|
||||
};
|
||||
|
||||
typedef Factory<PdmCodeGenerator, std::string> PdmCodeGeneratorFactory;
|
||||
|
||||
} // namespace caf
|
||||
} // namespace caf
|
||||
|
||||
@@ -46,7 +46,7 @@ CAF_PDM_CODE_GENERATOR_SOURCE_INIT( PdmMarkdownGenerator, "md" );
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString caf::PdmMarkdownGenerator::generate( PdmObjectFactory* factory ) const
|
||||
QString caf::PdmMarkdownGenerator::generate( PdmObjectFactory* factory, std::vector<QString>& errorMessages ) const
|
||||
{
|
||||
QString generatedCode;
|
||||
QTextStream out( &generatedCode );
|
||||
|
||||
@@ -58,7 +58,7 @@ class PdmMarkdownGenerator : public PdmCodeGenerator
|
||||
};
|
||||
|
||||
public:
|
||||
QString generate( PdmObjectFactory* factory ) const override;
|
||||
QString generate( PdmObjectFactory* factory, std::vector<QString>& errorMessages ) const override;
|
||||
};
|
||||
|
||||
} // namespace caf
|
||||
|
||||
@@ -59,7 +59,7 @@ CAF_PDM_CODE_GENERATOR_SOURCE_INIT( PdmPythonGenerator, "py" );
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString PdmPythonGenerator::generate( PdmObjectFactory* factory ) const
|
||||
QString caf::PdmPythonGenerator::generate( PdmObjectFactory* factory, std::vector<QString>& errorMessages ) const
|
||||
{
|
||||
QString generatedCode;
|
||||
QTextStream out( &generatedCode );
|
||||
@@ -92,6 +92,7 @@ QString PdmPythonGenerator::generate( PdmObjectFactory* factory ) const
|
||||
std::map<QString, std::map<QString, std::pair<QString, QString>>> classAttributesGenerated;
|
||||
std::map<QString, std::map<QString, QString>> classMethodsGenerated;
|
||||
std::map<QString, QString> classCommentsGenerated;
|
||||
std::set<QString> dataTypesInChildFields;
|
||||
|
||||
// First generate all attributes and comments to go into each object
|
||||
for ( std::shared_ptr<PdmObject> object : dummyObjects )
|
||||
@@ -181,9 +182,14 @@ QString PdmPythonGenerator::generate( PdmObjectFactory* factory ) const
|
||||
}
|
||||
else
|
||||
{
|
||||
QString valueString;
|
||||
QTextStream valueStream( &valueString );
|
||||
scriptability->readFromField( valueStream, true, true );
|
||||
QString valueString;
|
||||
|
||||
// Always make sure the default value for a ptrField is empty string
|
||||
if ( !field->hasPtrReferencedObjects() )
|
||||
{
|
||||
QTextStream valueStream( &valueString );
|
||||
scriptability->readFromField( valueStream, true, true );
|
||||
}
|
||||
if ( valueString.isEmpty() ) valueString = QString( "\"\"" );
|
||||
valueString = pythonifyDataValue( valueString );
|
||||
|
||||
@@ -203,6 +209,8 @@ QString PdmPythonGenerator::generate( PdmObjectFactory* factory ) const
|
||||
QString scriptDataType =
|
||||
PdmObjectScriptingCapabilityRegister::scriptClassNameFromClassKeyword( dataType );
|
||||
|
||||
dataTypesInChildFields.insert( scriptDataType );
|
||||
|
||||
QString commentDataType = field->xmlCapability()->isVectorField()
|
||||
? QString( "List of %1" ).arg( scriptDataType )
|
||||
: scriptDataType;
|
||||
@@ -385,6 +393,16 @@ QString PdmPythonGenerator::generate( PdmObjectFactory* factory ) const
|
||||
out << " return all_classes[class_keyword]\n";
|
||||
out << " return None\n";
|
||||
|
||||
// Check if all referenced data types are exported as classes
|
||||
for ( const auto& scriptDataType : dataTypesInChildFields )
|
||||
{
|
||||
if ( classesWritten.count( scriptDataType ) == 0 )
|
||||
{
|
||||
QString errorText = "No export for data type " + scriptDataType;
|
||||
errorMessages.push_back( errorText );
|
||||
}
|
||||
}
|
||||
|
||||
return generatedCode;
|
||||
}
|
||||
|
||||
|
||||
@@ -49,11 +49,11 @@ class PdmPythonGenerator : public PdmCodeGenerator
|
||||
CAF_PDM_CODE_GENERATOR_HEADER_INIT;
|
||||
|
||||
public:
|
||||
QString generate( PdmObjectFactory* factory ) const override;
|
||||
QString generate( PdmObjectFactory* factory, std::vector<QString>& errorMessages ) const override;
|
||||
static QString camelToSnakeCase( const QString& camelString );
|
||||
static QString dataTypeString( const PdmFieldHandle* field, bool useStrForUnknownDataTypes );
|
||||
|
||||
static QString pythonifyDataValue( const QString& dataValue );
|
||||
};
|
||||
|
||||
} // namespace caf
|
||||
} // namespace caf
|
||||
|
||||
@@ -250,7 +250,8 @@ TEST( PdmScriptingTest, BasicUse )
|
||||
std::string fileExt = "py";
|
||||
|
||||
std::unique_ptr<caf::PdmCodeGenerator> generator( caf::PdmCodeGeneratorFactory::instance()->create( fileExt ) );
|
||||
auto generatedText = generator->generate( caf::PdmDefaultObjectFactory::instance() );
|
||||
std::vector<QString> logMessages;
|
||||
auto generatedText = generator->generate( caf::PdmDefaultObjectFactory::instance(), logMessages );
|
||||
|
||||
auto string = generatedText.toStdString();
|
||||
}
|
||||
|
||||
@@ -104,6 +104,8 @@ public:
|
||||
virtual void onChildDeleted( PdmChildArrayFieldHandle* childArray,
|
||||
std::vector<caf::PdmObjectHandle*>& referringObjects );
|
||||
|
||||
virtual void onChildAdded( caf::PdmFieldHandle* containerForNewObject ){};
|
||||
|
||||
protected:
|
||||
void addField( PdmFieldHandle* field, const QString& keyword );
|
||||
|
||||
|
||||
Reference in New Issue
Block a user