fix python binding for create_torrent
This commit is contained in:
parent
3a4a7b742a
commit
38ca4113ea
|
@ -1,3 +1,4 @@
|
||||||
|
* fix create_torrent python binding
|
||||||
* update symlinks to conform to BEP 47
|
* update symlinks to conform to BEP 47
|
||||||
* fix python bindings for peer_info
|
* fix python bindings for peer_info
|
||||||
* support creating symlinks, for torrents with symlinks in them
|
* support creating symlinks, for torrents with symlinks in them
|
||||||
|
|
|
@ -140,14 +140,33 @@ struct to_string_view
|
||||||
|
|
||||||
static void* convertible(PyObject* x)
|
static void* convertible(PyObject* x)
|
||||||
{
|
{
|
||||||
return PyUnicode_Check(x) ? x: nullptr;
|
#if PY_VERSION_HEX >= 0x03020000
|
||||||
|
return PyBytes_Check(x)
|
||||||
|
#else
|
||||||
|
return PyString_Check(x)
|
||||||
|
#endif
|
||||||
|
? x : PyUnicode_Check(x) ? x : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void construct(PyObject* x, converter::rvalue_from_python_stage1_data* data)
|
static void construct(PyObject* x, converter::rvalue_from_python_stage1_data* data)
|
||||||
{
|
{
|
||||||
void* storage = ((converter::rvalue_from_python_storage<
|
void* storage = ((converter::rvalue_from_python_storage<
|
||||||
lt::string_view>*)data)->storage.bytes;
|
lt::string_view>*)data)->storage.bytes;
|
||||||
data->convertible = new (storage) lt::string_view(PyUnicode_AS_DATA(x), PyUnicode_GET_DATA_SIZE(x));
|
|
||||||
|
if (PyUnicode_Check(x))
|
||||||
|
{
|
||||||
|
data->convertible = new (storage) lt::string_view(PyUnicode_AS_DATA(x), PyUnicode_GET_DATA_SIZE(x));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data->convertible = new (storage) lt::string_view(
|
||||||
|
#if PY_VERSION_HEX >= 0x03020000
|
||||||
|
PyBytes_AsString(x), PyBytes_Size(x)
|
||||||
|
#else
|
||||||
|
PyString_AsString(x), PyString_Size(x)
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -264,12 +283,12 @@ struct list_to_bitfield
|
||||||
|
|
||||||
T p;
|
T p;
|
||||||
int const size = int(PyList_Size(x));
|
int const size = int(PyList_Size(x));
|
||||||
p.resize(size);
|
p.resize(size);
|
||||||
for (int i = 0; i < size; ++i)
|
for (int i = 0; i < size; ++i)
|
||||||
{
|
{
|
||||||
object o(borrowed(PyList_GetItem(x, i)));
|
object o(borrowed(PyList_GetItem(x, i)));
|
||||||
if (extract<bool>(o)) p.set_bit(IndexType{i});
|
if (extract<bool>(o)) p.set_bit(IndexType{i});
|
||||||
else p.clear_bit(IndexType{i});
|
else p.clear_bit(IndexType{i});
|
||||||
}
|
}
|
||||||
data->convertible = new (storage) T(std::move(p));
|
data->convertible = new (storage) T(std::move(p));
|
||||||
}
|
}
|
||||||
|
@ -496,4 +515,5 @@ void bind_converters()
|
||||||
to_bitfield_flag<lt::create_flags_t>();
|
to_bitfield_flag<lt::create_flags_t>();
|
||||||
to_bitfield_flag<lt::pex_flags_t>();
|
to_bitfield_flag<lt::pex_flags_t>();
|
||||||
to_bitfield_flag<lt::reannounce_flags_t>();
|
to_bitfield_flag<lt::reannounce_flags_t>();
|
||||||
|
to_string_view();
|
||||||
}
|
}
|
||||||
|
|
|
@ -229,6 +229,9 @@ void bind_create_torrent()
|
||||||
.def("piece_size", &create_torrent::piece_size)
|
.def("piece_size", &create_torrent::piece_size)
|
||||||
.def("priv", &create_torrent::priv)
|
.def("priv", &create_torrent::priv)
|
||||||
.def("set_root_cert", &create_torrent::set_root_cert, (arg("pem")))
|
.def("set_root_cert", &create_torrent::set_root_cert, (arg("pem")))
|
||||||
|
.def("add_collection", &create_torrent::add_collection)
|
||||||
|
.def("add_similar_torrent", &create_torrent::add_similar_torrent)
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
s.attr("optimize_alignment") = create_torrent::optimize_alignment;
|
s.attr("optimize_alignment") = create_torrent::optimize_alignment;
|
||||||
|
|
|
@ -32,6 +32,7 @@ class test_create_torrent(unittest.TestCase):
|
||||||
|
|
||||||
def test_from_torrent_info(self):
|
def test_from_torrent_info(self):
|
||||||
ti = lt.torrent_info('unordered.torrent')
|
ti = lt.torrent_info('unordered.torrent')
|
||||||
|
print(ti.ssl_cert())
|
||||||
ct = lt.create_torrent(ti)
|
ct = lt.create_torrent(ti)
|
||||||
entry = ct.generate()
|
entry = ct.generate()
|
||||||
content = lt.bencode(entry).strip()
|
content = lt.bencode(entry).strip()
|
||||||
|
@ -42,6 +43,19 @@ class test_create_torrent(unittest.TestCase):
|
||||||
print(entry)
|
print(entry)
|
||||||
self.assertEqual(content, file_content)
|
self.assertEqual(content, file_content)
|
||||||
|
|
||||||
|
def test_from_scratch(self):
|
||||||
|
fs = lt.file_storage()
|
||||||
|
fs.add_file('test/file1', 1000)
|
||||||
|
fs.add_file('test/file2', 2000)
|
||||||
|
ct = lt.create_torrent(fs)
|
||||||
|
ct.add_url_seed('foo')
|
||||||
|
ct.add_http_seed('bar')
|
||||||
|
ct.add_tracker('bar')
|
||||||
|
ct.set_root_cert('1234567890')
|
||||||
|
ct.add_collection('1337')
|
||||||
|
entry = ct.generate()
|
||||||
|
print(entry)
|
||||||
|
|
||||||
|
|
||||||
class test_session_stats(unittest.TestCase):
|
class test_session_stats(unittest.TestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue