From e7a46981a76c2d60b8485d06ffc408623276a091 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Mon, 1 Oct 2018 21:58:48 +0200
Subject: Made the Python bindings more Pythonish.

---
 plugins/pychrysalide/analysis/content.c | 296 ++++++++++++++++----------------
 tests/analysis/contents/checksum.py     |   4 +-
 2 files changed, 148 insertions(+), 152 deletions(-)

diff --git a/plugins/pychrysalide/analysis/content.c b/plugins/pychrysalide/analysis/content.c
index f828b1a..f590f82 100644
--- a/plugins/pychrysalide/analysis/content.c
+++ b/plugins/pychrysalide/analysis/content.c
@@ -41,18 +41,6 @@
 
 
 
-/* Fournit une empreinte unique (SHA256) pour les données. */
-static PyObject *py_binary_content_get_checksum(PyObject *, PyObject *);
-
-/* Détermine le nombre d'octets lisibles. */
-static PyObject *py_binary_content_compute_size(PyObject *, PyObject *);
-
-/* Détermine la position initiale d'un contenu. */
-static PyObject *py_binary_content_compute_start_pos(PyObject *, PyObject *);
-
-/* Détermine la position finale d'un contenu. */
-static PyObject *py_binary_content_compute_end_pos(PyObject *, PyObject *);
-
 /* Fournit une portion des données représentées. */
 static PyObject *py_binary_content_read_raw(PyObject *, PyObject *);
 
@@ -68,129 +56,21 @@ static PyObject *py_binary_content_read_u32(PyObject *, PyObject *);
 /* Lit un nombre non signé sur huit octets. */
 static PyObject *py_binary_content_read_u64(PyObject *, PyObject *);
 
-/* Renvoie tout le contenu binaire d'un coup. */
-static PyObject *py_binary_content_get_all_bytes(PyObject *, void *);
-
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : self = contenu binaire à manipuler.                          *
-*                args = non utilisé ici.                                      *
-*                                                                             *
-*  Description : Fournit une empreinte unique (SHA256) pour les données.      *
-*                                                                             *
-*  Retour      : Bilan de l'opération.                                        *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static PyObject *py_binary_content_get_checksum(PyObject *self, PyObject *args)
-{
-    PyObject *result;                       /* Instance à retourner        */
-    GBinContent *content;                   /* Version GLib du format      */
-    const gchar *checksum;                  /* Empreinte fournie           */
-
-    content = G_BIN_CONTENT(pygobject_get(self));
-
-    checksum = g_binary_content_get_checksum(content);
-
-    result = PyUnicode_FromString(checksum);
-
-    return result;
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : self = contenu binaire à manipuler.                          *
-*                args = non utilisé ici.                                      *
-*                                                                             *
-*  Description : Détermine le nombre d'octets lisibles.                       *
-*                                                                             *
-*  Retour      : Quantité représentée.                                        *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static PyObject *py_binary_content_compute_size(PyObject *self, PyObject *args)
-{
-    PyObject *result;                       /* Instance à retourner        */
-    GBinContent *content;                   /* Version GLib du format      */
-    phys_t size;                            /* Quantité d'octets dispos.   */
-
-    content = G_BIN_CONTENT(pygobject_get(self));
-
-    size = g_binary_content_compute_size(content);
-
-    result = PyLong_FromUnsignedLongLong(size);
-
-    return result;
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : self = contenu binaire à manipuler.                          *
-*                args = non utilisé ici.                                      *
-*                                                                             *
-*  Description : Détermine la position initiale d'un contenu.                 *
-*                                                                             *
-*  Retour      : Position initiale.                                           *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static PyObject *py_binary_content_compute_start_pos(PyObject *self, PyObject *args)
-{
-    PyObject *result;                       /* Instance à retourner        */
-    GBinContent *content;                   /* Version GLib du format      */
-    vmpa2t pos;                             /* Position à transmettre      */
-
-    content = G_BIN_CONTENT(pygobject_get(self));
-
-    g_binary_content_compute_start_pos(content, &pos);
-
-    result = build_from_internal_vmpa(&pos);
-
-    return result;
-
-}
-
-
-/******************************************************************************
-*                                                                             *
-*  Paramètres  : self = contenu binaire à manipuler.                          *
-*                args = non utilisé ici.                                      *
-*                                                                             *
-*  Description : Détermine la position finale d'un contenu.                   *
-*                                                                             *
-*  Retour      : Position finale.                                             *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static PyObject *py_binary_content_compute_end_pos(PyObject *self, PyObject *args)
-{
-    PyObject *result;                       /* Instance à retourner        */
-    GBinContent *content;                   /* Version GLib du format      */
-    vmpa2t pos;                             /* Position à transmettre      */
+/* Fournit une empreinte unique (SHA256) pour les données. */
+static PyObject *py_binary_content_get_checksum(PyObject *, void *);
 
-    content = G_BIN_CONTENT(pygobject_get(self));
+/* Détermine le nombre d'octets lisibles. */
+static PyObject *py_binary_content_compute_size(PyObject *, void *);
 
-    g_binary_content_compute_end_pos(content, &pos);
+/* Détermine la position initiale d'un contenu. */
+static PyObject *py_binary_content_compute_start_pos(PyObject *, void *);
 
-    result = build_from_internal_vmpa(&pos);
+/* Détermine la position finale d'un contenu. */
+static PyObject *py_binary_content_compute_end_pos(PyObject *, void *);
 
-    return result;
+/* Renvoie tout le contenu binaire d'un coup. */
+static PyObject *py_binary_content_get_all_bytes(PyObject *, void *);
 
-}
 
 
 /******************************************************************************
@@ -430,6 +310,126 @@ static PyObject *py_binary_content_read_u64(PyObject *self, PyObject *args)
 *  Paramètres  : self    = contenu binaire à manipuler.                       *
 *                closure = adresse non utilisée ici.                          *
 *                                                                             *
+*  Description : Fournit une empreinte unique (SHA256) pour les données.      *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_binary_content_get_checksum(PyObject *self, void *closure)
+{
+    PyObject *result;                       /* Instance à retourner        */
+    GBinContent *content;                   /* Version GLib du format      */
+    const gchar *checksum;                  /* Empreinte fournie           */
+
+    content = G_BIN_CONTENT(pygobject_get(self));
+
+    checksum = g_binary_content_get_checksum(content);
+
+    result = PyUnicode_FromString(checksum);
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = contenu binaire à manipuler.                       *
+*                closure = adresse non utilisée ici.                          *
+*                                                                             *
+*  Description : Détermine le nombre d'octets lisibles.                       *
+*                                                                             *
+*  Retour      : Quantité représentée.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_binary_content_compute_size(PyObject *self, void *closure)
+{
+    PyObject *result;                       /* Instance à retourner        */
+    GBinContent *content;                   /* Version GLib du format      */
+    phys_t size;                            /* Quantité d'octets dispos.   */
+
+    content = G_BIN_CONTENT(pygobject_get(self));
+
+    size = g_binary_content_compute_size(content);
+
+    result = PyLong_FromUnsignedLongLong(size);
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = contenu binaire à manipuler.                       *
+*                closure = adresse non utilisée ici.                          *
+*                                                                             *
+*  Description : Détermine la position initiale d'un contenu.                 *
+*                                                                             *
+*  Retour      : Position initiale.                                           *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_binary_content_compute_start_pos(PyObject *self, void *closure)
+{
+    PyObject *result;                       /* Instance à retourner        */
+    GBinContent *content;                   /* Version GLib du format      */
+    vmpa2t pos;                             /* Position à transmettre      */
+
+    content = G_BIN_CONTENT(pygobject_get(self));
+
+    g_binary_content_compute_start_pos(content, &pos);
+
+    result = build_from_internal_vmpa(&pos);
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = contenu binaire à manipuler.                       *
+*                closure = adresse non utilisée ici.                          *
+*                                                                             *
+*  Description : Détermine la position finale d'un contenu.                   *
+*                                                                             *
+*  Retour      : Position finale.                                             *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_binary_content_compute_end_pos(PyObject *self, void *closure)
+{
+    PyObject *result;                       /* Instance à retourner        */
+    GBinContent *content;                   /* Version GLib du format      */
+    vmpa2t pos;                             /* Position à transmettre      */
+
+    content = G_BIN_CONTENT(pygobject_get(self));
+
+    g_binary_content_compute_end_pos(content, &pos);
+
+    result = build_from_internal_vmpa(&pos);
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self    = contenu binaire à manipuler.                       *
+*                closure = adresse non utilisée ici.                          *
+*                                                                             *
 *  Description : Renvoie tout le contenu binaire d'un coup.                   *
 *                                                                             *
 *  Retour      : Ensemble d'octets lus.                                       *
@@ -479,26 +479,6 @@ PyTypeObject *get_python_binary_content_type(void)
 {
     static PyMethodDef py_binary_content_methods[] = {
         {
-            "get_checksum", py_binary_content_get_checksum,
-            METH_NOARGS,
-            "get_checksum($self, /)\n--\n\nCompute a SHA256 hash as chechsum of handled data."
-        },
-        {
-            "compute_size", py_binary_content_compute_size,
-            METH_NOARGS,
-            "compute_size($self, /)\n--\n\nCompute the quantity of readable bytes."
-        },
-        {
-            "compute_start_pos", py_binary_content_compute_start_pos,
-            METH_NOARGS,
-            "compute_start_pos($self, /)\n--\n\nCompute the starting position of the binary content."
-        },
-        {
-            "compute_end_pos", py_binary_content_compute_end_pos,
-            METH_NOARGS,
-            "compute_end_pos($self, /)\n--\n\nCompute the ending position of the binary content."
-        },
-        {
             "read_raw", py_binary_content_read_raw,
             METH_VARARGS,
             "read_raw($self, addr, length, /)\n--\n\nRead bytes from a given position."
@@ -528,6 +508,22 @@ PyTypeObject *get_python_binary_content_type(void)
 
     static PyGetSetDef py_binary_content_getseters[] = {
         {
+            "checksum", py_binary_content_get_checksum, NULL,
+            "Compute a SHA256 hash as chechsum of handled data.", NULL
+        },
+        {
+            "size", py_binary_content_compute_size, NULL,
+            "Compute the quantity of readable bytes.", NULL
+        },
+        {
+            "start_pos", py_binary_content_compute_start_pos, NULL,
+            "Provide the starting position of the binary content.", NULL
+        },
+        {
+            "end_pos", py_binary_content_compute_end_pos, NULL,
+            "Provide the ending position of the binary content.", NULL
+        },
+        {
             "data", py_binary_content_get_all_bytes, NULL,
             "Provide all the content bytes at once.", NULL
         },
diff --git a/tests/analysis/contents/checksum.py b/tests/analysis/contents/checksum.py
index ba09a3f..54e4630 100644
--- a/tests/analysis/contents/checksum.py
+++ b/tests/analysis/contents/checksum.py
@@ -47,7 +47,7 @@ class TestRestrictedContent(ChrysalideTestCase):
 
         expected = hashlib.sha256(b'AAAABBBBCCCCDDDD').hexdigest()
 
-        self.assertEqual(fcnt.get_checksum(), expected)
+        self.assertEqual(fcnt.checksum, expected)
 
 
     def testPartialChecksum(self):
@@ -64,4 +64,4 @@ class TestRestrictedContent(ChrysalideTestCase):
 
         expected = hashlib.sha256(b'BBBB').hexdigest()
 
-        self.assertEqual(rcnt.get_checksum(), expected)
+        self.assertEqual(rcnt.checksum, expected)
-- 
cgit v0.11.2-87-g4458