Skip to content

Commit

Permalink
Merge #1629: De-duplicate and change dict_factory
Browse files Browse the repository at this point in the history
8f382d0 Add test for dict_factory() (Kristaps Kaupe)
2978b18 De-duplicate and change dict_factory (Kristaps Kaupe)

Pull request description:

  Move to `jmbase` and switch to implementation from [Python docs](https://docs.python.org/3/library/sqlite3.html#sqlite3-howto-row-factory), which seems nicer.

Top commit has no ACKs.

Tree-SHA512: 02ca21fea0eb45cc2f05d47e85b4150c300ad895aaf6102c90c433b38b95f8fb7b1e04292542afc6073fc22b14b07c38c01957f1380bed080585d9b67c0ee4bf
  • Loading branch information
kristapsk committed Jan 3, 2024
2 parents e87dccc + 8f382d0 commit 80d6ea6
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 19 deletions.
2 changes: 1 addition & 1 deletion src/jmbase/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
EXIT_SUCCESS, hexbin, dictchanger, listchanger,
JM_WALLET_NAME_PREFIX, JM_APP_NAME,
IndentedHelpFormatterWithNL, wrapped_urlparse,
bdict_sdict_convert, random_insert)
bdict_sdict_convert, random_insert, dict_factory)
from .proof_of_work import get_pow, verify_pow
from .twisted_utils import (stop_reactor, is_hs_uri, get_tor_agent,
get_nontor_agent, JMHiddenService,
Expand Down
5 changes: 5 additions & 0 deletions src/jmbase/support.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from os import path, environ
from functools import wraps
from optparse import IndentedHelpFormatter
from sqlite3 import Cursor, Row
from typing import List
import urllib.parse as urlparse

Expand Down Expand Up @@ -356,3 +357,7 @@ def get_free_tcp_ports(num_ports: int) -> List[int]:
for s in sockets:
s.close()
return ports

def dict_factory(cursor: Cursor, row: Row) -> dict:
fields = [column[0] for column in cursor.description]
return {key: value for key, value in zip(fields, row)}
9 changes: 1 addition & 8 deletions src/jmclient/wallet_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from jmclient.wallet_service import WalletService
from jmbase.support import (get_password, jmprint, EXIT_FAILURE,
EXIT_ARGERROR, utxo_to_utxostr, hextobin, bintohex,
IndentedHelpFormatterWithNL)
IndentedHelpFormatterWithNL, dict_factory)

from .cryptoengine import TYPE_P2PKH, TYPE_P2SH_P2WPKH, TYPE_P2WPKH, \
TYPE_SEGWIT_WALLET_FIDELITY_BONDS
Expand Down Expand Up @@ -815,13 +815,6 @@ def wallet_change_passphrase(walletservice,
return True


def dict_factory(cursor, row):
d = {}
for idx, col in enumerate(cursor.description):
d[col[0]] = row[idx]
return d


def wallet_fetch_history(wallet, options):
# sort txes in a db because python can be really bad with large lists
con = sqlite3.connect(":memory:")
Expand Down
9 changes: 1 addition & 8 deletions src/jmdaemon/orderbookwatch.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,10 @@

from jmdaemon.protocol import JM_VERSION
from jmdaemon import fidelity_bond_sanity_check
from jmbase.support import get_log, joinmarket_alert
from jmbase.support import dict_factory, get_log, joinmarket_alert
log = get_log()


def dict_factory(cursor, row):
d = {}
for idx, col in enumerate(cursor.description):
d[col[0]] = row[idx]
return d


class JMTakerError(Exception):
pass

Expand Down
17 changes: 15 additions & 2 deletions test/jmbase/test_base_support.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#! /usr/bin/env python
import pytest
import copy
from jmbase import random_insert
import pytest
import sqlite3

from jmbase import dict_factory, random_insert

def test_color_coded_logging():
# TODO
Expand Down Expand Up @@ -30,3 +32,14 @@ def test_random_insert(list1, list2):
i_x = list1.index(x)
i_y = list1.index(y)
assert i_y > i_x

def test_dict_factory():
con = sqlite3.connect(":memory:")
con.row_factory = dict_factory
db = con.cursor()
db.execute("CREATE TABLE test (one TEXT, two TEXT)")
db.execute("INSERT INTO test VALUES (?, ?)", [ "one", "two" ])
res = db.execute("SELECT * FROM test")
row = res.fetchone()
assert row["one"] == "one"
assert row["two"] == "two"

0 comments on commit 80d6ea6

Please sign in to comment.