SourceXtractorPlusPlus
0.21
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
SEImplementation
src
lib
PythonConfig
PyOutputWrapper.cpp
Go to the documentation of this file.
1
17
/*
18
* @file PyOutputWrapper.cpp
19
* @author Alejandro Alvarez Ayllon
20
*/
21
22
#include "
SEImplementation/PythonConfig/PyOutputWrapper.h
"
23
#include <boost/locale/encoding_utf.hpp>
24
#include <boost/python/extract.hpp>
25
26
namespace
SourceXtractor
{
27
28
namespace
bp
=
boost::python
;
29
using
boost::locale::conv::utf_to_utf;
30
31
PyOutputWrapper::PyOutputWrapper
(
Elements::Logging
&
logger
) : closed(
false
), m_logger(
logger
) {}
32
33
void
PyOutputWrapper::close
() {
34
PyErr_Format
(
PyExc_OSError
,
"Method %s not supported on wrapper file objects"
,
__func__
);
35
bp::throw_error_already_set();
36
}
37
38
int
PyOutputWrapper::fileno
()
const
{
39
PyErr_Format
(
PyExc_OSError
,
"Method %s not supported on wrapper file objects"
,
__func__
);
40
bp::throw_error_already_set();
41
return
-1;
42
}
43
44
void
PyOutputWrapper::flush
() {
45
}
46
47
bool
PyOutputWrapper::isatty
()
const
{
48
return
false
;
49
}
50
51
bool
PyOutputWrapper::readable
()
const
{
52
return
false
;
53
}
54
55
std::string
PyOutputWrapper::read
(
int
) {
56
PyErr_Format
(
PyExc_IOError
,
"Object is write only"
);
57
bp::throw_error_already_set();
58
return
{};
59
}
60
61
std::string
PyOutputWrapper::readline
(
int
) {
62
PyErr_Format
(
PyExc_IOError
,
"Object is write only"
);
63
bp::throw_error_already_set();
64
return
{};
65
}
66
67
bp::list
PyOutputWrapper::readlines
(
int
) {
68
PyErr_Format
(
PyExc_IOError
,
"Object is write only"
);
69
bp::throw_error_already_set();
70
return
{};
71
}
72
73
int
PyOutputWrapper::seek
(
int
,
int
) {
74
PyErr_Format
(
PyExc_OSError
,
"Method %s not supported on wrapper file objects"
,
__func__
);
75
bp::throw_error_already_set();
76
return
0;
77
}
78
79
bool
PyOutputWrapper::seekable
()
const
{
80
return
false
;
81
}
82
83
int
PyOutputWrapper::tell
()
const
{
84
PyErr_Format
(
PyExc_OSError
,
"Method %s not supported on wrapper file objects"
,
__func__
);
85
bp::throw_error_already_set();
86
return
0;
87
}
88
89
void
PyOutputWrapper::truncate
(
int
) {
90
PyErr_Format
(
PyExc_OSError
,
"Method %s not supported on wrapper file objects"
,
__func__
);
91
bp::throw_error_already_set();
92
}
93
94
bool
PyOutputWrapper::writable
()
const
{
95
return
true
;
96
}
97
98
int
PyOutputWrapper::write
(
const
bp::object&
obj
) {
99
bp::extract<std::string>
string_extractor
{
obj
};
100
bp::extract<std::wstring>
unicode_extractor
{
obj
};
101
std::string
str;
102
103
if
(
string_extractor
.check()) {
104
str =
string_extractor
;
105
}
106
else
if
(
unicode_extractor
.check()) {
107
std::wstring
unicode
=
unicode_extractor
;
108
str =
utf_to_utf<char>
(
unicode
.c_str(),
unicode
.c_str() +
unicode
.size());
109
}
110
else
{
111
std::string
obj_type_name
= bp::extract<std::string>(
obj
.attr(
"__class__"
).attr(
"__name__"
));
112
PyErr_Format
(
PyExc_TypeError
,
113
"SourceXtractor output wrapper only accepts classic strings or unicode strings, got %s"
,
114
obj_type_name
.c_str()
115
);
116
bp::throw_error_already_set();
117
}
118
119
for
(
auto
c
: str) {
120
if
(
c
==
'\n'
) {
121
m_logger
.
info
() <<
m_buffer
.
str
();
122
m_buffer
.
str
(
std::string
());
123
}
else
{
124
m_buffer
<<
c
;
125
}
126
}
127
return
str.
size
();
128
}
129
130
void
PyOutputWrapper::writelines
(
const
bp::list&
lines
) {
131
for
(
int
i
= 0;
i
< bp::len(
lines
); ++
i
) {
132
write
(
lines
[
i
]);
133
}
134
}
135
136
}
// end namespace SourceXtractor
137
PyOutputWrapper.h
std::string
Elements::Logging
Elements::Logging::info
void info(const std::string &logMessage)
SourceXtractor::PyOutputWrapper::fileno
int fileno() const
Definition
PyOutputWrapper.cpp:38
SourceXtractor::PyOutputWrapper::read
std::string read(int)
Definition
PyOutputWrapper.cpp:55
SourceXtractor::PyOutputWrapper::seekable
bool seekable() const
Definition
PyOutputWrapper.cpp:79
SourceXtractor::PyOutputWrapper::seek
int seek(int, int)
Definition
PyOutputWrapper.cpp:73
SourceXtractor::PyOutputWrapper::close
void close()
Definition
PyOutputWrapper.cpp:33
SourceXtractor::PyOutputWrapper::readlines
boost::python::list readlines(int)
Definition
PyOutputWrapper.cpp:67
SourceXtractor::PyOutputWrapper::tell
int tell() const
Definition
PyOutputWrapper.cpp:83
SourceXtractor::PyOutputWrapper::writelines
void writelines(const boost::python::list &)
Definition
PyOutputWrapper.cpp:130
SourceXtractor::PyOutputWrapper::m_buffer
std::ostringstream m_buffer
Definition
PyOutputWrapper.h:65
SourceXtractor::PyOutputWrapper::writable
bool writable() const
Definition
PyOutputWrapper.cpp:94
SourceXtractor::PyOutputWrapper::flush
void flush()
Definition
PyOutputWrapper.cpp:44
SourceXtractor::PyOutputWrapper::readable
bool readable() const
Definition
PyOutputWrapper.cpp:51
SourceXtractor::PyOutputWrapper::PyOutputWrapper
PyOutputWrapper(Elements::Logging &logger)
Definition
PyOutputWrapper.cpp:31
SourceXtractor::PyOutputWrapper::readline
std::string readline(int)
Definition
PyOutputWrapper.cpp:61
SourceXtractor::PyOutputWrapper::m_logger
Elements::Logging m_logger
Definition
PyOutputWrapper.h:64
SourceXtractor::PyOutputWrapper::truncate
void truncate(int)
Definition
PyOutputWrapper.cpp:89
SourceXtractor::PyOutputWrapper::write
int write(const boost::python::object &)
Definition
PyOutputWrapper.cpp:98
SourceXtractor::PyOutputWrapper::isatty
bool isatty() const
Definition
PyOutputWrapper.cpp:47
std::function
Euclid::Configuration::logger
static Elements::Logging logger
SourceXtractor
Definition
Aperture.h:30
boost::python
std::string::size
T size(T... args)
std::ostringstream::str
T str(T... args)
Generated by
1.10.0