return (0);
}
-static PyObject *kmeth_extract(PyObject *me, PyObject *arg, PyObject *kw)
+static PyObject *kmeth_extractline(PyObject *me, PyObject *arg, PyObject *kw)
{
key_filter f = { 0, 0 };
- PyObject *file;
- PyObject *nameobj;
- char *name;
- FILE *fp;
- static const char *const kwlist[] = { "file", "filter", 0 };
-
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!|O&:extract", KWLIST,
- &PyFile_Type, &file,
- convfilter, &f) ||
- (fp = PyFile_AsFile(file)) == 0 ||
- (nameobj = PyFile_Name(file)) == 0 ||
- (name = TEXT_STR(nameobj)) == 0)
+ dstr d = DSTR_INIT;
+ PyObject *rc = 0;
+ static const char *const kwlist[] = { "filter", 0 };
+
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "|O&:extract", KWLIST,
+ convfilter, &f))
goto end;
- if (key_extract(KEY_KF(me), KEY_K(me), fp, &f))
- OSERR(name);
- RETURN_ME;
+ key_extractline(KEY_KF(me), KEY_K(me), &d, &f);
+ rc = TEXT_FROMSTRLEN(d.buf, d.len);
end:
- return (0);
+ dstr_destroy(&d);
+ return (rc);
}
static PyObject *kmeth_fingerprint(PyObject *me,
NAMETH(delete, "KEY.delete()")
NAMETH(expire, "KEY.expire()")
METH (used, "KEY.used(TIME)")
- KWMETH(extract, "KEY.extract(FILE, [filter = <any>])")
+ KWMETH(extractline, "KEY.extractline([filter = <any>])")
KWMETH(fingerprint, "KEY.fingerprint(HASH, [filter = '-secret'])")
#undef METHNAME
{ 0 }
return (0);
}
-static PyObject *kfmeth_merge(PyObject *me, PyObject *arg, PyObject *kw)
+static PyObject *kfmeth_mergeline(PyObject *me, PyObject *arg, PyObject *kw)
{
struct reportinfo ri = { Py_None, 0 };
- char *name;
- PyObject *x = 0;
- FILE *fp = 0;
- int rc;
- static const char *const kwlist[] = { "file", "report", 0 };
+ const char *file, *line;
+ int lno, rc;
+ static const char *const kwlist[] = { "name", "lno", "line", "report", 0 };
Py_XINCREF(arg); Py_XINCREF(kw);
- if (!PyArg_ParseTupleAndKeywords(arg, kw, "O!|O:merge", KWLIST,
- &PyFile_Type, &x, &ri.func))
+ if (!PyArg_ParseTupleAndKeywords(arg, kw, "sis|O:merge", KWLIST,
+ &file, &lno, &line, &ri.func))
goto end;
if (ri.func != Py_None && !PyCallable_Check(ri.func))
TYERR("reporter function not callable");
- if ((fp = PyFile_AsFile(x)) == 0)
- goto end;
- x = PyFile_Name(x);
- if ((name = TEXT_STR(x)) == 0)
- goto end;
- rc = key_merge(KEYFILE_KF(me), name, fp, pythonreporter, &ri);
+ rc = key_mergeline(KEYFILE_KF(me), file, lno, line, pythonreporter, &ri);
if (ri.stop)
goto end;
if (rc != 0)
static const PyMethodDef keyfile_pymethods[] = {
#define METHNAME(func) kfmeth_##func
NAMETH(save, "KF.save()")
- KWMETH(merge, "KF.merge(FILE, [report = <built-in-reporter>])")
+ KWMETH(mergeline, "KF.mergeline(NAME, LNO, LINE, "
+ "[report = <built-in-reporter>])")
KWMETH(newkey, "KF.newkey(ID, TYPE, [exptime = KEXP_FOREVER]) "
"-> KEY")
METH (byid, "KF.byid(KEYID) -> KEY|None")
me.assertRaises(TypeError, kf.bytype, 12345)
me.assertRaises(C.KeyError, kf.byid, 0x12345678)
+ me.assertRaises(C.KeyError, kf.mergeline, "nowhere", 2, "")
+
## The keyring should be readonly.
me.assertRaises(C.KeyError, kf.newkey, 0x12345678, "fail")
me.assertRaises(C.KeyError, setattr, k, "tag", "foo")
me.assertRaises(C.KeyError, delattr, k, "tag")
+ me.assertRaises(C.KeyError, kf.mergeline, "notexist", 1,
+ "22222222:test integer,public:32519164 forever forever -")
me.assertRaises(C.KeyError, setattr, k, "data", C.KeyDataString("foo"))
def test_keywrite(me):
del k.comment
me.assertEqual(k.comment, None)
+ kf.mergeline("notexist", 1,
+ "22222222:test integer,public:32519164 forever forever -")
+
###--------------------------------------------------------------------------
def keydata_equalp(kd0, kd1):