本文整理汇总了C++中PythonObject类的典型用法代码示例。如果您正苦于以下问题:C++ PythonObject类的具体用法?C++ PythonObject怎么用?C++ PythonObject使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了PythonObject类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PythonObject
PythonObject
PythonDictionary::GetItemForKey(const PythonObject &key) const
{
if (IsAllocated() && key.IsValid())
return PythonObject(PyRefType::Borrowed, PyDict_GetItem(m_py_obj, key.get()));
return PythonObject();
}
示例2: GetAttributeValue
PythonObject PythonObject::ResolveName(llvm::StringRef name) const {
// Resolve the name in the context of the specified object. If, for example,
// `this` refers to a PyModule, then this will look for `name` in this
// module. If `this` refers to a PyType, then it will resolve `name` as an
// attribute of that type. If `this` refers to an instance of an object,
// then it will resolve `name` as the value of the specified field.
//
// This function handles dotted names so that, for example, if `m_py_obj`
// refers to the `sys` module, and `name` == "path.append", then it will find
// the function `sys.path.append`.
size_t dot_pos = name.find('.');
if (dot_pos == llvm::StringRef::npos) {
// No dots in the name, we should be able to find the value immediately as
// an attribute of `m_py_obj`.
return GetAttributeValue(name);
}
// Look up the first piece of the name, and resolve the rest as a child of
// that.
PythonObject parent = ResolveName(name.substr(0, dot_pos));
if (!parent.IsAllocated())
return PythonObject();
// Tail recursion.. should be optimized by the compiler
return parent.ResolveName(name.substr(dot_pos + 1));
}
示例3: AppendItem
void PythonList::AppendItem(const PythonObject &object) {
if (IsAllocated() && object.IsValid()) {
// `PyList_Append` does *not* steal a reference, so do not call `Py_INCREF`
// here like we do with `PyList_SetItem`.
PyList_Append(m_py_obj, object.get());
}
}
示例4: setattro
DECLARE_EXPORT int ResourceSkill::setattro(const Attribute& attr, const PythonObject& field)
{
if (attr.isA(Tags::tag_resource))
{
if (!field.check(Resource::metadata))
{
PyErr_SetString(PythonDataException, "resourceskill resource must be of type resource");
return -1;
}
Resource* y = static_cast<Resource*>(static_cast<PyObject*>(field));
setResource(y);
}
else if (attr.isA(Tags::tag_skill))
{
if (!field.check(Skill::metadata))
{
PyErr_SetString(PythonDataException, "resourceskill skill must be of type skill");
return -1;
}
Skill* y = static_cast<Skill*>(static_cast<PyObject*>(field));
setSkill(y);
}
else if (attr.isA(Tags::tag_priority))
setPriority(field.getInt());
else if (attr.isA(Tags::tag_effective_end))
setEffectiveEnd(field.getDate());
else if (attr.isA(Tags::tag_effective_start))
setEffectiveStart(field.getDate());
else
return -1;
return 0;
}
示例5: SetItemAtIndex
void PythonTuple::SetItemAtIndex(uint32_t index, const PythonObject &object) {
if (IsAllocated() && object.IsValid()) {
// PyTuple_SetItem is documented to "steal" a reference, so we need to
// convert it to an owned reference by incrementing it.
Py_INCREF(object.get());
PyTuple_SetItem(m_py_obj, index, object.get());
}
}
示例6: result
StructuredData::ArraySP PythonTuple::CreateStructuredArray() const {
StructuredData::ArraySP result(new StructuredData::Array);
uint32_t count = GetSize();
for (uint32_t i = 0; i < count; ++i) {
PythonObject obj = GetItemAtIndex(i);
result->AddItem(obj.CreateStructuredObject());
}
return result;
}
示例7: setattro
DECLARE_EXPORT int Solver::setattro(const Attribute& attr, const PythonObject& field)
{
if (attr.isA(Tags::tag_name))
setName(field.getString());
else if (attr.isA(Tags::tag_loglevel))
setLogLevel(field.getInt());
else
return -1; // Error
return 0; // OK
}
示例8: setattro
DECLARE_EXPORT int Skill::setattro(const Attribute& attr, const PythonObject& field)
{
if (attr.isA(Tags::tag_name))
setName(field.getString());
else if (attr.isA(Tags::tag_source))
setSource(field.getString());
else
return -1; // Error
return 0; // OK
}
示例9: setattro
DECLARE_EXPORT int SolverMRP::setattro(const Attribute& attr, const PythonObject& field)
{
if (attr.isA(Tags::tag_constraints))
setConstraints(field.getInt());
else if (attr.isA(Tags::tag_autocommit))
setAutocommit(field.getBool());
else if (attr.isA(Tags::tag_userexit_flow))
setUserExitFlow(field);
else if (attr.isA(Tags::tag_userexit_demand))
setUserExitDemand(field);
else if (attr.isA(Tags::tag_userexit_buffer))
setUserExitBuffer(field);
else if (attr.isA(Tags::tag_userexit_resource))
setUserExitResource(field);
else if (attr.isA(Tags::tag_userexit_operation))
setUserExitOperation(field);
else if (attr.isA(Tags::tag_plantype))
setPlanType(field.getInt());
// Less common parameters
else if (attr.isA(tag_iterationthreshold))
setIterationThreshold(field.getDouble());
else if (attr.isA(tag_iterationaccuracy))
setIterationAccuracy(field.getDouble());
else if (attr.isA(tag_lazydelay))
setLazyDelay(field.getTimeperiod());
else if (attr.isA(tag_allowsplits))
setAllowSplits(field.getBool());
else if (attr.isA(tag_planSafetyStockFirst))
setPlanSafetyStockFirst(field.getBool());
// Default parameters
else
return Solver::setattro(attr, field);
return 0;
}
示例10:
PythonObject
PythonObject::ResolveNameWithDictionary(llvm::StringRef name,
const PythonDictionary &dict) {
size_t dot_pos = name.find('.');
llvm::StringRef piece = name.substr(0, dot_pos);
PythonObject result = dict.GetItemForKey(PythonString(piece));
if (dot_pos == llvm::StringRef::npos) {
// There was no dot, we're done.
return result;
}
// There was a dot. The remaining portion of the name should be looked up in
// the context of the object that was found in the dictionary.
return result.ResolveName(name.substr(dot_pos + 1));
}
示例11: if
DECLARE_EXPORT int SetupMatrix::Rule::setattro(const Attribute& attr, const PythonObject& field)
{
if (attr.isA(Tags::tag_priority))
setPriority(field.getInt());
else if (attr.isA(Tags::tag_fromsetup))
setFromSetup(field.getString());
else if (attr.isA(Tags::tag_tosetup))
setToSetup(field.getString());
else if (attr.isA(Tags::tag_duration))
setDuration(field.getTimeperiod());
else if (attr.isA(Tags::tag_cost))
setCost(field.getDouble());
else
return -1; // Error
return 0; // OK
}
示例12: TEST_F
TEST_F(PythonDataObjectsTest, TestPythonCallableInvoke) {
auto list = m_builtins_module.ResolveName("list").AsType<PythonCallable>();
PythonInteger one(1);
PythonString two("two");
PythonTuple three = {one, two};
PythonTuple tuple_to_convert = {one, two, three};
PythonObject result = list({tuple_to_convert});
EXPECT_TRUE(PythonList::Check(result.get()));
auto list_result = result.AsType<PythonList>();
EXPECT_EQ(3U, list_result.GetSize());
EXPECT_EQ(one.get(), list_result.GetItemAtIndex(0).get());
EXPECT_EQ(two.get(), list_result.GetItemAtIndex(1).get());
EXPECT_EQ(three.get(), list_result.GetItemAtIndex(2).get());
}
示例13: callFunctionWithArgs
PythonObject callFunctionWithArgs(
PythonObject function,
const std::vector<PythonObject>& args,
const std::vector<std::pair<std::string, PythonObject>>& kwargs)
{
if (!PyCallable_Check(function.get())) {
throw WrappyError("Wrappy: Supplied object isn't callable.");
}
// Build tuple
size_t sz = args.size();
PythonObject tuple(PythonObject::owning {}, PyTuple_New(sz));
if (!tuple) {
PyErr_Print();
throw WrappyError("Wrappy: Couldn't create python typle.");
}
for (size_t i = 0; i < sz; ++i) {
PyObject* arg = args.at(i).get();
Py_XINCREF(arg); // PyTuple_SetItem steals a reference
PyTuple_SetItem(tuple.get(), i, arg);
}
// Build kwargs dict
PythonObject dict(PythonObject::owning {}, PyDict_New());
if (!dict) {
PyErr_Print();
throw WrappyError("Wrappy: Couldn't create python dictionary.");
}
for (const auto& kv : kwargs) {
PyDict_SetItemString(dict.get(), kv.first.c_str(), kv.second.get());
}
PythonObject res(PythonObject::owning{},
PyObject_Call(function.get(), tuple.get(), dict.get()));
if (!res) {
PyErr_Print();
throw WrappyError("Wrappy: Error calling function");
}
return res;
}
示例14: setattro
DECLARE_EXPORT int Item::setattro(const Attribute& attr, const PythonObject& field)
{
if (attr.isA(Tags::tag_name))
setName(field.getString());
else if (attr.isA(Tags::tag_description))
setDescription(field.getString());
else if (attr.isA(Tags::tag_category))
setCategory(field.getString());
else if (attr.isA(Tags::tag_subcategory))
setSubCategory(field.getString());
else if (attr.isA(Tags::tag_price))
setPrice(field.getDouble());
else if (attr.isA(Tags::tag_owner))
{
if (!field.check(Item::metadata))
{
PyErr_SetString(PythonDataException, "item owner must be of type item");
return -1;
}
Item* y = static_cast<Item*>(static_cast<PyObject*>(field));
setOwner(y);
}
else if (attr.isA(Tags::tag_operation))
{
if (!field.check(Operation::metadata))
{
PyErr_SetString(PythonDataException, "item operation must be of type operation");
return -1;
}
Operation* y = static_cast<Operation*>(static_cast<PyObject*>(field));
setOperation(y);
}
else if (attr.isA(Tags::tag_hidden))
setHidden(field.getBool());
else
return -1;
return 0;
}
示例15: setattro
DECLARE_EXPORT int Location::setattro(const Attribute& attr, const PythonObject& field)
{
if (attr.isA(Tags::tag_name))
setName(field.getString());
else if (attr.isA(Tags::tag_description))
setDescription(field.getString());
else if (attr.isA(Tags::tag_category))
setCategory(field.getString());
else if (attr.isA(Tags::tag_subcategory))
setSubCategory(field.getString());
else if (attr.isA(Tags::tag_owner))
{
if (!field.check(Location::metadata))
{
PyErr_SetString(PythonDataException, "location owner must be of type location");
return -1;
}
Location* y = static_cast<Location*>(static_cast<PyObject*>(field));
setOwner(y);
}
else if (attr.isA(Tags::tag_available))
{
if (!field.check(CalendarDouble::metadata))
{
PyErr_SetString(PythonDataException, "location availability must be of type double calendar");
return -1;
}
CalendarDouble* y = static_cast<CalendarDouble*>(static_cast<PyObject*>(field));
setAvailable(y);
}
else if (attr.isA(Tags::tag_hidden))
setHidden(field.getBool());
else
return -1;
return 0;
}