2016-04-19 9 views
0

Вызов метода в Poppler возвращает объект GDate в моем коде Python. Я не могу найти способ, как красиво распечатать этот объект.PyGObject GTK + GLib.Date strftime()

После Python GI API Reference, я придумал следующее:

gdate_object = annot_mapping.annot.get_date() 
destination_buffer = '.' * 50 
print('Output:', GLib.Date.strftime(destination_buffer, 50, '%c', gdate_object)) 
print('Buffer:', annot_time) 

Однако это не ставит ничего в буфере, в то время как он делает выходного письменного размера буфера.

Как получить доступ к буферу назначения?

ответ

1

Похоже, что никто не задокументировал этот API, чтобы он был сломан для привязки к интроспекции.

Я сделал простой патч, но кажется, что pygobject не любит выделять строковые буферы, я буду говорить с ним вверх по течению.

diff --git a/glib/gdate.c b/glib/gdate.c 
index bea2448..bacdb93 100644 
--- a/glib/gdate.c 
+++ b/glib/gdate.c 
@@ -2418,8 +2418,8 @@ win32_strftime_helper (const GDate  *d, 

/** 
    * g_date_strftime: 
- * @s: destination buffer 
- * @slen: buffer size 
+ * @s: (out caller-allocates) (array length=slen): destination buffer 
+ * @slen: (in): buffer size 
    * @format: format string 
    * @date: valid #GDate 
    * 
+0

Ничего себе, спасибо за рытье! Мне любопытно, что они скажут вверх по течению. Если вам нужно подать отчет об ошибке, сообщите мне. – timothymctim

+0

Итак, из того, что я собираю, эта функция, вероятно, никогда не будет использоваться на изучаемом языке. lgi поддерживает только массивы с фиксированным размером (что имеет смысл), и pygobject не поддерживает их вообще. Кто-то предлагал попробовать преобразовать его в GDateTime и использовать 'g_date_time_format()', если это возможно. API был просто плохо разработан для использования GI. – TingPing