summaryrefslogtreecommitdiffstats
path: root/src/mgr/PyUtil.cc
blob: a8efc2f28005b80596ce830212c82f2f8e7c271d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab

#include <Python.h>

#include "PyUtil.h"

PyObject *get_python_typed_option_value(
  Option::type_t type,
  const std::string& value)
{
  switch (type) {
  case Option::TYPE_INT:
  case Option::TYPE_UINT:
  case Option::TYPE_SIZE:
    return PyLong_FromString((char *)value.c_str(), nullptr, 0);
  case Option::TYPE_SECS:
  case Option::TYPE_MILLISECS:
  case Option::TYPE_FLOAT:
    {
      PyObject *s = PyUnicode_FromString(value.c_str());
      PyObject *f = PyFloat_FromString(s);
      Py_DECREF(s);
      return f;
    }
  case Option::TYPE_BOOL:
    if (value == "1" || value == "true" || value == "True" ||
	value == "on" || value == "yes") {
      Py_INCREF(Py_True);
      return Py_True;
    } else {
      Py_INCREF(Py_False);
      return Py_False;
    }
  case Option::TYPE_STR:
  case Option::TYPE_ADDR:
  case Option::TYPE_ADDRVEC:
  case Option::TYPE_UUID:
    break;
  }
  return PyUnicode_FromString(value.c_str());
}