<commit_before>"""Guess which db package to use to open a db file."""

import struct

def whichdb(filename):
    """Guess which db package to use to open a db file.

    Return values:

    - None if the database file can't be read;
    - empty string if the file can be read but can't be recognized
    - the module name (e.g. "dbm" or "gdbm") if recognized.

    Importing the given module may still fail, and opening the
    database using that module may still fail.
    """

    # Check for dbm first -- this has a .pag and a .dir file
    try:
	f = open(filename + ".pag", "rb")
	f.close()
	f = open(filename + ".dir", "rb")
	f.close()
	return "dbm"
    except IOError:
	pass

    # See if the file exists, return None if not
    try:
	f = open(filename, "rb")
    except IOError:
	return None

    # Read the first 4 bytes of the file -- the magic number
    s = f.read(4)
    f.close()

    # Return "" if not at least 4 bytes
    if len(s) != 4:
	return ""

    # Convert to 4-byte int in native byte order -- return "" if impossible
    try:
	(magic,) = struct.unpack("l", s)
    except struct.error:
	try:
	    (magic,) = struct.unpack("i", s)
	except struct.error:
	    return ""

    # Check for GNU dbm
    if magic == 0x13579ace:
	return "gdbm"

    # Check for BSD hash
    if magic == 0x061561:
	return "dbhash"

    # Unknown
    return ""<commit_msg>Use new struct which supports standardized sizes<commit_after>"""Guess which db package to use to open a db file."""

import struct

def whichdb(filename):
    """Guess which db package to use to open a db file.

    Return values:

    - None if the database file can't be read;
    - empty string if the file can be read but can't be recognized
    - the module name (e.g. "dbm" or "gdbm") if recognized.

    Importing the given module may still fail, and opening the
    database using that module may still fail.
    """

    # Check for dbm first -- this has a .pag and a .dir file
    try:
	f = open(filename + ".pag", "rb")
	f.close()
	f = open(filename + ".dir", "rb")
	f.close()
	return "dbm"
    except IOError:
	pass

    # See if the file exists, return None if not
    try:
	f = open(filename, "rb")
    except IOError:
	return None

    # Read the first 4 bytes of the file -- the magic number
    s = f.read(4)
    f.close()

    # Return "" if not at least 4 bytes
    if len(s) != 4:
	return ""

    # Convert to 4-byte int in native byte order -- return "" if impossible
    try:
	(magic,) = struct.unpack("=l", s)
    except struct.error:
	return ""

    # Check for GNU dbm
    if magic == 0x13579ace:
	return "gdbm"

    # Check for BSD hash
    if magic == 0x061561:
	return "dbhash"

    # Unknown
    return ""
{'fraction_non_alphanumeric': 0.10798816568047337, 'fraction_numerical': 0.013313609467455622, 'mean_word_length': 2.481338481338481, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '293761', 'n_tokens_mistral': 927, 'n_tokens_neox': 865, 'n_words': 376}