ENDIF (ENABLE_DRPM)
# option to enable/disable python support
-OPTION (ENABLE_PYTHON "Enable python support?" OFF)
+OPTION (ENABLE_PYTHON "Enable python support?" ON)
# Threaded XZ Compression
# Note: This option is disabled by default, because Createrepo_c
message("Package version: ${VERSION}")
-# Default python version
-if (NOT PYTHON_DESIRED)
- set (PYTHON_DESIRED "2")
-endif()
-
# Other files
pkg_check_modules(BASHCOMP bash-completion)
* xz (http://tukaani.org/xz/) - xz-devel/liblzma-dev
* zlib (http://www.zlib.net/) - zlib-devel/zlib1g-dev
* *Documentation:* doxygen (http://doxygen.org/) - doxygen/doxygen
-* *Documentation:* sphinx (http://sphinx-doc.org/) - python-sphinx/
+* *Documentation:* sphinx (http://sphinx-doc.org/) - python3-sphinx/
* **Test requires:** check (http://check.sourceforge.net/) - check-devel/check
-* **Test requires:** python-nose (https://nose.readthedocs.org/) - python-nose/python-nose
+* **Test requires:** python3-nose (https://nose.readthedocs.org/) - python3-nose/python3-nose
* **Experimental support:** drpm (https://git.fedorahosted.org/git/drpm.git)
From your checkout dir:
cmake -DDRPM_PATH="/home/tmlcoch/git/drpm" .. && make
-## Building for a different Python version
-
-By default, cmake should set up things to build for Python 2, but you can do a build for Python 3 like this::
-
- cmake -DPYTHON_DESIRED=3 .
-
## Other build options
### ``-DENABLE_LEGACY_WEAKDEPS=ON``
PYTHONPATH=`readlink -f ./build/src/python/` nosetests -s tests/python/tests/
-Or, for an alternative python version, specify the appropriate nosetests executable:
-
- PYTHONPATH=`readlink -f ./build/src/python/` nosetests-3.4 -s tests/python/tests/
-
### Links
[Bugzilla](https://bugzilla.redhat.com/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=MODIFIED&bug_status=VERIFIED&component=createrepo_c&query_format=advanced)
usr/include/createrepo_c /usr/include/
usr/lib/libcreaterepo_c.so /usr/lib/
usr/lib/pkgconfig/createrepo_c.pc /usr/lib/pkgconfig/
+usr/lib/python3/dist-packages/createrepo_c /usr/lib/python3/dist-packages/
%{_libdir}/libcreaterepo_c.so
%{_libdir}/pkgconfig/createrepo_c.pc
%{_includedir}/createrepo_c
-#%{python3_sitearch}/createrepo_c
+%{python3_sitearch}/createrepo_c
%files -n libcreaterepo_c0
%defattr(-, root, root,-)
-if (${PYTHON_DESIRED} STREQUAL "2")
+MACRO(PYTHON_UNSET)
unset(PYTHON_LIBRARY)
unset(PYTHON_INCLUDE_DIR)
unset(PYTHON_EXECUTABLE)
unset(PYTHON_LIBRARY CACHE)
unset(PYTHON_INCLUDE_DIR CACHE)
unset(PYTHON_EXECUTABLE CACHE)
- FIND_PACKAGE(PythonLibs 2)
- FIND_PACKAGE(PythonInterp 2 REQUIRED)
-else()
- SET(Python_ADDITIONAL_VERSIONS 3.0)
- unset(PYTHON_LIBRARY)
- unset(PYTHON_INCLUDE_DIR)
- unset(PYTHON_EXECUTABLE)
- unset(PYTHON_LIBRARY CACHE)
- unset(PYTHON_INCLUDE_DIR CACHE)
- unset(PYTHON_EXECUTABLE CACHE)
- FIND_PACKAGE(PythonLibs 3.0)
- FIND_PACKAGE(PythonInterp 3.0 REQUIRED)
-endif()
+ENDMACRO(PYTHON_UNSET)
+
+PYTHON_UNSET()
+SET(Python_ADDITIONAL_VERSIONS 3.0 CACHE INTERNAL "")
+FIND_PACKAGE(PythonLibs 3 EXACT)
+FIND_PACKAGE(PythonInterp 3 EXACT REQUIRED)
+
EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import stdout; from distutils import sysconfig; stdout.write(sysconfig.get_python_lib(True))" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH})
* USA.
*/
+#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <assert.h>
#include <stddef.h>
py_write(_CrFileObject *self, PyObject *args)
{
char *str;
- int len;
+ Py_ssize_t len;
GError *tmp_err = NULL;
if (!PyArg_ParseTuple(args, "s#:set_num_of_pkgs", &str, &len))
val = (gint64) PyLong_AsLong(value);
} else if (PyFloat_Check(value)) {
val = (gint64) PyFloat_AS_DOUBLE(value);
-#if PY_MAJOR_VERSION < 3
- } else if (PyInt_Check(value)) {
- val = (gint64) PyInt_AS_LONG(value);
-#endif
} else {
PyErr_SetString(PyExc_TypeError, "Number expected!");
return -1;
val = PyLong_AsLong(value);
} else if (PyFloat_Check(value)) {
val = (gint64) PyFloat_AS_DOUBLE(value);
-#if PY_MAJOR_VERSION < 3
- } else if (PyInt_Check(value)) {
- val = (gint64) PyInt_AS_LONG(value);
-#endif
} else {
PyErr_SetString(PyExc_TypeError, "Number expected!");
return -1;
return -1;
}
cr_ContentStat *rec = self->stat;
- char *str = g_strdup(PyObject_ToStrOrNull(value));
+ PyObject *pybytes = PyObject_ToPyBytesOrNull(value);
+ char *str = g_strdup(PyBytes_AsString(pybytes));
+ Py_XDECREF(pybytes);
*((char **) ((size_t) rec + (size_t) member_offset)) = str;
return 0;
}
METH_VARARGS, detect_compression__doc__},
{"compression_type", (PyCFunction)py_compression_type,
METH_VARARGS, compression_type__doc__},
- { NULL }
+ {NULL, NULL, 0, NULL} /* sentinel */
};
-#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef createrepo_c_module_def = {
PyModuleDef_HEAD_INIT,
"_createrepo_c",
PyObject *
PyInit__createrepo_c(void)
-
-#else
-
-#define FAILURE
-
-PyMODINIT_FUNC
-init_createrepo_c(void)
-#endif
{
-#if PY_MAJOR_VERSION >= 3
PyObject *m = PyModule_Create(&createrepo_c_module_def);
-#else
- PyObject *m = Py_InitModule("_createrepo_c", createrepo_c_methods);
-#endif
if (!m)
- return FAILURE;
+ return NULL;
/* Exceptions */
if (!init_exceptions())
- return FAILURE;
+ return NULL;
PyModule_AddObject(m, "CreaterepoCError", CrErr_Exception);
/* Objects */
/* _createrepo_c.ContentStat */
if (PyType_Ready(&ContentStat_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&ContentStat_Type);
PyModule_AddObject(m, "ContentStat", (PyObject *)&ContentStat_Type);
/* _createrepo_c.CrFile */
if (PyType_Ready(&CrFile_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&CrFile_Type);
PyModule_AddObject(m, "CrFile", (PyObject *)&CrFile_Type);
/* _createrepo_c.Package */
if (PyType_Ready(&Package_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&Package_Type);
PyModule_AddObject(m, "Package", (PyObject *)&Package_Type);
/* _createrepo_c.Metadata */
if (PyType_Ready(&Metadata_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&Metadata_Type);
PyModule_AddObject(m, "Metadata", (PyObject *)&Metadata_Type);
/* _createrepo_c.MetadataLocation */
if (PyType_Ready(&MetadataLocation_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&MetadataLocation_Type);
PyModule_AddObject(m, "MetadataLocation", (PyObject *)&MetadataLocation_Type);
/* _createrepo_c.Repomd */
if (PyType_Ready(&Repomd_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&Repomd_Type);
PyModule_AddObject(m, "Repomd", (PyObject *)&Repomd_Type);
/* _createrepo_c.RepomdRecord */
if (PyType_Ready(&RepomdRecord_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&RepomdRecord_Type);
PyModule_AddObject(m, "RepomdRecord", (PyObject *)&RepomdRecord_Type);
/* _createrepo_c.Sqlite */
if (PyType_Ready(&Sqlite_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&Sqlite_Type);
PyModule_AddObject(m, "Sqlite", (PyObject *)&Sqlite_Type);
/* _createrepo_c.UpdateCollection */
if (PyType_Ready(&UpdateCollection_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&UpdateCollection_Type);
PyModule_AddObject(m, "UpdateCollection",
(PyObject *)&UpdateCollection_Type);
/* _createrepo_c.UpdateCollectionPackage */
if (PyType_Ready(&UpdateCollectionPackage_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&UpdateCollectionPackage_Type);
PyModule_AddObject(m, "UpdateCollectionPackage",
(PyObject *)&UpdateCollectionPackage_Type);
/* _createrepo_c.UpdateInfo */
if (PyType_Ready(&UpdateInfo_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&UpdateInfo_Type);
PyModule_AddObject(m, "UpdateInfo", (PyObject *)&UpdateInfo_Type);
/* _createrepo_c.UpdateRecord */
if (PyType_Ready(&UpdateRecord_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&UpdateRecord_Type);
PyModule_AddObject(m, "UpdateRecord", (PyObject *)&UpdateRecord_Type);
/* _createrepo_c.UpdateReference */
if (PyType_Ready(&UpdateReference_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&UpdateReference_Type);
PyModule_AddObject(m, "UpdateReference", (PyObject *)&UpdateReference_Type);
/* _createrepo_c.XmlFile */
if (PyType_Ready(&XmlFile_Type) < 0)
- return FAILURE;
+ return NULL;
Py_INCREF(&XmlFile_Type);
PyModule_AddObject(m, "XmlFile", (PyObject *)&XmlFile_Type);
PyModule_AddIntConstant(m, "XML_WARNING_UNKNOWNVAL", CR_XML_WARNING_UNKNOWNVAL);
PyModule_AddIntConstant(m, "XML_WARNING_BADATTRVAL", CR_XML_WARNING_BADATTRVAL);
-#if PY_MAJOR_VERSION >= 3
return m;
-#else
- return;
-#endif
}
int
init_exceptions()
{
-#if (PY_MAJOR_VERSION == 2) && (PY_MINOR_VERSION < 7)
- CrErr_Exception = PyErr_NewException("createrepo_c.CreaterepoCError", NULL, NULL);
-#else
CrErr_Exception = PyErr_NewExceptionWithDoc("createrepo_c.CreaterepoCError",
"Createrepo_c library exception", NULL, NULL);
-#endif
if (!CrErr_Exception)
return 0;
{"copy", (PyCFunction)copy_pkg, METH_NOARGS, copy__doc__},
{"__copy__", (PyCFunction)copy_pkg, METH_NOARGS, copy__doc__},
{"__deepcopy__", (PyCFunction)deepcopy_pkg, METH_VARARGS, copy__doc__},
- {NULL} /* sentinel */
+ {NULL, NULL, 0, NULL} /* sentinel */
};
/* Getters */
val = (gint64) PyLong_AsLong(value);
} else if (PyFloat_Check(value)) {
val = (gint64) PyFloat_AS_DOUBLE(value);
-#if PY_MAJOR_VERSION < 3
- } else if (PyInt_Check(value)) {
- val = (gint64) PyInt_AS_LONG(value);
-#endif
} else {
PyErr_SetString(PyExc_TypeError, "Number expected!");
return -1;
sort_records__doc__},
{"xml_dump", (PyCFunction)xml_dump, METH_NOARGS,
xml_dump__doc__},
- {NULL} /* sentinel */
+ {NULL, NULL, 0, NULL} /* sentinel */
};
/* Convertors for getsetters */
}
cr_Repomd *repomd = self->repomd;
- char *str = cr_safe_string_chunk_insert(repomd->chunk,
- PyObject_ToStrOrNull(value));
+ char *str = PyObject_ToChunkedString(value, repomd->chunk);
*((char **) ((size_t) repomd + (size_t) member_offset)) = str;
return 0;
}
rename_file__doc__},
{"load_contentstat", (PyCFunction)load_contentstat, METH_VARARGS,
load_contentstat__doc__},
- {NULL} /* sentinel */
+ {NULL, NULL, 0, NULL} /* sentinel */
};
/* getsetters */
val = (gint64) PyLong_AsLong(value);
} else if (PyFloat_Check(value)) {
val = (gint64) PyFloat_AS_DOUBLE(value);
-#if PY_MAJOR_VERSION < 3
- } else if (PyInt_Check(value)) {
- val = (gint64) PyInt_AS_LONG(value);
-#endif
} else {
PyErr_SetString(PyExc_TypeError, "Number expected!");
return -1;
val = PyLong_AsLong(value);
} else if (PyFloat_Check(value)) {
val = (long long) PyFloat_AS_DOUBLE(value);
-#if PY_MAJOR_VERSION < 3
- } else if (PyInt_Check(value)) {
- val = PyInt_AS_LONG(value);
-#endif
} else {
PyErr_SetString(PyExc_TypeError, "Number expected!");
return -1;
return -1;
}
cr_RepomdRecord *rec = self->record;
- char *str = cr_safe_string_chunk_insert(rec->chunk,
- PyObject_ToStrOrNull(value));
+ char *str = PyObject_ToChunkedString(value, rec->chunk);
*((char **) ((size_t) rec + (size_t) member_offset)) = str;
return 0;
}
dbinfo_update__doc__},
{"close", (PyCFunction)close_db, METH_NOARGS,
close__doc__},
- {NULL} /* sentinel */
+ {NULL, NULL, 0, NULL} /* sentinel */
};
PyTypeObject Sqlite_Type = {
"Error while error handling");
} else {
if (PyUnicode_Check(pystr)) {
- pystr = PyUnicode_AsUTF8String(pystr);
+ PyObject *pybytes = PyUnicode_AsUTF8String(pystr);
+ Py_DECREF(pystr);
+
+ if (!pybytes) {
+ PyErr_Clear();
+ g_set_error(err, ERR_DOMAIN, CRE_XMLPARSER,
+ "Error while error handling");
+ return;
+ }
+ pystr = pybytes;
}
g_set_error(err, ERR_DOMAIN, CRE_XMLPARSER,
"%s", PyBytes_AsString(pystr));
return PyUnicode_FromString(str);
}
-char *
-PyObject_ToStrOrNull(PyObject *pyobj)
+PyObject *
+PyObject_ToPyBytesOrNull(PyObject *pyobj)
{
- // String returned by this function shoud not be freed or modified
if (PyUnicode_Check(pyobj)) {
pyobj = PyUnicode_AsUTF8String(pyobj);
+ if (!pyobj) {
+ return NULL;
+ }
+ } else {
+ Py_XINCREF(pyobj);
}
if (PyBytes_Check(pyobj)) {
- return PyBytes_AsString(pyobj);
+ return pyobj;
}
- // TODO: ? Add support for pyobj like: ("xxx",) and ["xxx"]
return NULL;
}
char *
PyObject_ToChunkedString(PyObject *pyobj, GStringChunk *chunk)
{
- return cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ char *ret = NULL;
+ PyObject *pybytes = PyObject_ToPyBytesOrNull(pyobj);
+ if (pybytes) {
+ ret = cr_safe_string_chunk_insert(chunk, PyBytes_AsString(pybytes));
+ Py_DECREF(pybytes);
+ }
+ return ret;
}
long long
num = (long long) PyLong_AsLongLong(pyobj);
} else if (PyFloat_Check(pyobj)) {
num = (long long) PyFloat_AS_DOUBLE(pyobj);
-#if PY_MAJOR_VERSION < 3
- } else if (PyInt_Check(pyobj)) {
- num = (long long) PyInt_AS_LONG(pyobj);
-#endif
}
return num;
}
cr_Dependency *dep = cr_dependency_new();
pyobj = PyTuple_GetItem(tuple, 0);
- dep->name = cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ dep->name = PyObject_ToChunkedString(pyobj, chunk);
pyobj = PyTuple_GetItem(tuple, 1);
- dep->flags = cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ dep->flags = PyObject_ToChunkedString(pyobj, chunk);
pyobj = PyTuple_GetItem(tuple, 2);
- dep->epoch = cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ dep->epoch = PyObject_ToChunkedString(pyobj, chunk);
pyobj = PyTuple_GetItem(tuple, 3);
- dep->version = cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ dep->version = PyObject_ToChunkedString(pyobj, chunk);
pyobj = PyTuple_GetItem(tuple, 4);
- dep->release = cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ dep->release = PyObject_ToChunkedString(pyobj, chunk);
pyobj = PyTuple_GetItem(tuple, 5);
dep->pre = (PyObject_IsTrue(pyobj)) ? TRUE : FALSE;
cr_PackageFile *file = cr_package_file_new();
pyobj = PyTuple_GetItem(tuple, 0);
- file->type = cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ file->type = PyObject_ToChunkedString(pyobj, chunk);
pyobj = PyTuple_GetItem(tuple, 1);
- file->path = cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ file->path = PyObject_ToChunkedString(pyobj, chunk);
pyobj = PyTuple_GetItem(tuple, 2);
- file->name = cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ file->name = PyObject_ToChunkedString(pyobj, chunk);
return file;
}
cr_ChangelogEntry *log = cr_changelog_entry_new();
pyobj = PyTuple_GetItem(tuple, 0);
- log->author = cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ log->author = PyObject_ToChunkedString(pyobj, chunk);
pyobj = PyTuple_GetItem(tuple, 1);
log->date = PyObject_ToLongLongOrZero(pyobj);
pyobj = PyTuple_GetItem(tuple, 2);
- log->changelog = cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ log->changelog = PyObject_ToChunkedString(pyobj, chunk);
return log;
}
cr_DistroTag *tag = cr_distrotag_new();
pyobj = PyTuple_GetItem(tuple, 0);
- tag->cpeid = cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ tag->cpeid = PyObject_ToChunkedString(pyobj, chunk);
pyobj = PyTuple_GetItem(tuple, 2);
- tag->val = cr_safe_string_chunk_insert(chunk, PyObject_ToStrOrNull(pyobj));
+ tag->val = PyObject_ToChunkedString(pyobj, chunk);
return tag;
}
void PyErr_ToGError(GError **err);
PyObject *PyUnicodeOrNone_FromString(const char *str);
-char *PyObject_ToStrOrNull(PyObject *pyobj);
+PyObject *PyObject_ToPyBytesOrNull(PyObject *pyobj);
char *PyObject_ToChunkedString(PyObject *pyobj, GStringChunk *chunk);
PyObject *PyObject_FromDependency(cr_Dependency *dep);
append__doc__},
{"copy", (PyCFunction)copy_updatecollection, METH_NOARGS,
copy__doc__},
- {NULL} /* sentinel */
+ {NULL, NULL, 0, NULL} /* sentinel */
};
/* Convertors for getsetters */
return -1;
}
cr_UpdateCollection *rec = self->collection;
- char *str = cr_safe_string_chunk_insert(rec->chunk,
- PyObject_ToStrOrNull(value));
+ char *str = PyObject_ToChunkedString(value, rec->chunk);
*((char **) ((size_t) rec + (size_t) member_offset)) = str;
return 0;
}
static struct PyMethodDef updatecollectionpackage_methods[] = {
{"copy", (PyCFunction)copy_updatecollectionpackage, METH_NOARGS,
copy__doc__},
- {NULL} /* sentinel */
+ {NULL, NULL, 0, NULL} /* sentinel */
};
/* getsetters */
val = PyLong_AsLong(value);
} else if (PyFloat_Check(value)) {
val = (long long) PyFloat_AS_DOUBLE(value);
-#if PY_MAJOR_VERSION < 3
- } else if (PyInt_Check(value)) {
- val = PyInt_AS_LONG(value);
-#endif
} else {
PyErr_SetString(PyExc_TypeError, "Number expected!");
return -1;
return -1;
}
cr_UpdateCollectionPackage *pkg = self->pkg;
- char *str = cr_safe_string_chunk_insert(pkg->chunk,
- PyObject_ToStrOrNull(value));
+ char *str = PyObject_ToChunkedString(value, pkg->chunk);
*((char **) ((size_t) pkg + (size_t) member_offset)) = str;
return 0;
}
append__doc__},
{"xml_dump", (PyCFunction)xml_dump, METH_NOARGS,
xml_dump__doc__},
- {NULL} /* sentinel */
+ {NULL, NULL, 0, NULL} /* sentinel */
};
/* Convertors for getsetters */
append_collection__doc__},
{"copy", (PyCFunction)copy_updaterecord, METH_NOARGS,
copy__doc__},
- {NULL} /* sentinel */
+ {NULL, NULL, 0, NULL} /* sentinel */
};
/* Convertors for getsetters */
return -1;
}
cr_UpdateRecord *rec = self->record;
- char *str = cr_safe_string_chunk_insert(rec->chunk,
- PyObject_ToStrOrNull(value));
+ char *str = PyObject_ToChunkedString(value, rec->chunk);
*((char **) ((size_t) rec + (size_t) member_offset)) = str;
return 0;
}
static struct PyMethodDef updatereference_methods[] = {
{"copy", (PyCFunction)copy_updatereference, METH_NOARGS,
copy__doc__},
- {NULL} /* sentinel */
+ {NULL, NULL, 0, NULL} /* sentinel */
};
/* getsetters */
return -1;
}
- if (PyUnicode_Check(value)) {
- value = PyUnicode_AsUTF8String(value);
- }
-
cr_UpdateReference *ref = self->reference;
- char *str = cr_safe_string_chunk_insert(ref->chunk,
- PyObject_ToStrOrNull(value));
-
+ char *str = PyObject_ToChunkedString(value, ref->chunk);
*((char **) ((size_t) ref + (size_t) member_offset)) = str;
return 0;
}
add_chunk__doc__},
{"close", (PyCFunction)xmlfile_close, METH_NOARGS,
close__doc__},
- {NULL} /* sentinel */
+ {NULL, NULL, 0, NULL} /* sentinel */
};
PyTypeObject XmlFile_Type = {
-#!/usr/bin/python
+#!/usr/bin/env python3
import sys
import re
-#!/usr/bin/python
+#!/usr/bin/env python3
import re
import sys
def parse(root_dir):
path = os.path.join(root_dir, VERSION_FILE_PATH)
if not os.path.exists(path):
- print(("File %s doesn't exists" % path))
+ print("File {path} doesn't exist".format(path=path))
return None
content = open(path, "r").read()
ver = {}
- ver['major'] = re.search('SET\s*\(CR_MAJOR\s+"(\d+)"', content).group(1)
- ver['minor'] = re.search('SET\s*\(CR_MINOR\s+"(\d+)"', content).group(1)
- ver['patch'] = re.search('SET\s*\(CR_PATCH\s+"(\d+)"', content).group(1)
+ ver['major'] = re.search(r'SET\s*\(CR_MAJOR\s+"(\d+)"', content).group(1)
+ ver['minor'] = re.search(r'SET\s*\(CR_MINOR\s+"(\d+)"', content).group(1)
+ ver['patch'] = re.search(r'SET\s*\(CR_PATCH\s+"(\d+)"', content).group(1)
return ver
path = args[0]
if not os.path.isdir(path):
- parser.error("Directory %s doesn't exists" % path)
+ parser.error("Directory {path} doesn't exist".format(path=path))
ver = parse(path)
if ver is None:
sys.exit(1)
if options.major:
- print((ver['major']))
+ print(ver['major'])
elif options.minor:
- print(( ver['minor']))
+ print(ver['minor'])
elif options.patch:
- print(( ver['patch']))
+ print(ver['patch'])
else:
- print(( "%(major)s.%(minor)s.%(patch)s" % ver))
+ print("{major}.{minor}.{patch}".format(**ver))
sys.exit(0)
-#!/usr/bin/env python
+#!/usr/bin/env python3
"""
Convert a single line from test output to run single test command.
import argparse
LIBPATH = "./build/src/python/"
-COMMAND = "PYTHONPATH=`readlink -f {libpath}` nosetests{nosever} -s -v {testpath}"
+COMMAND = "PYTHONPATH=`readlink -f {libpath}` nosetests -s -v {testpath}"
TEST_PATH_PREFIX = "tests/python"
if __name__ == "__main__":
parser.add_argument('test_out_line', metavar='TESTOUTPUTLINE',
type=str,
help='A single line from python unittesttest output')
- parser.add_argument('--python3', action='store_true', help='Python3 version')
args = parser.parse_args()
test_out_line = args.test_out_line
full_path = os.path.join(TEST_PATH_PREFIX, test_path)
- nosever = ""
- pythonversion = 2
-
- if (args.python3):
- nosever = "-3.3"
- pythonversion = 3
-
testpath = "{0}:{1}.{2}".format(full_path, test_case, test_name)
- libpath = LIBPATH.format(pythonversion=pythonversion)
-
+ libpath = LIBPATH
- command = COMMAND.format(libpath=libpath, nosever=nosever, testpath=testpath)
+ command = COMMAND.format(libpath=libpath, testpath=testpath)
print(command)