mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			108 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# pysqlite2/dbapi2.py: the DB-API 2.0 interface
 | 
						|
#
 | 
						|
# Copyright (C) 2004-2005 Gerhard Häring <gh@ghaering.de>
 | 
						|
#
 | 
						|
# This file is part of pysqlite.
 | 
						|
#
 | 
						|
# This software is provided 'as-is', without any express or implied
 | 
						|
# warranty.  In no event will the authors be held liable for any damages
 | 
						|
# arising from the use of this software.
 | 
						|
#
 | 
						|
# Permission is granted to anyone to use this software for any purpose,
 | 
						|
# including commercial applications, and to alter it and redistribute it
 | 
						|
# freely, subject to the following restrictions:
 | 
						|
#
 | 
						|
# 1. The origin of this software must not be misrepresented; you must not
 | 
						|
#    claim that you wrote the original software. If you use this software
 | 
						|
#    in a product, an acknowledgment in the product documentation would be
 | 
						|
#    appreciated but is not required.
 | 
						|
# 2. Altered source versions must be plainly marked as such, and must not be
 | 
						|
#    misrepresented as being the original software.
 | 
						|
# 3. This notice may not be removed or altered from any source distribution.
 | 
						|
 | 
						|
import datetime
 | 
						|
import time
 | 
						|
import collections.abc
 | 
						|
 | 
						|
from _sqlite3 import *
 | 
						|
from _sqlite3 import _deprecated_version
 | 
						|
 | 
						|
_deprecated_names = frozenset({"version", "version_info"})
 | 
						|
 | 
						|
paramstyle = "qmark"
 | 
						|
 | 
						|
apilevel = "2.0"
 | 
						|
 | 
						|
Date = datetime.date
 | 
						|
 | 
						|
Time = datetime.time
 | 
						|
 | 
						|
Timestamp = datetime.datetime
 | 
						|
 | 
						|
def DateFromTicks(ticks):
 | 
						|
    return Date(*time.localtime(ticks)[:3])
 | 
						|
 | 
						|
def TimeFromTicks(ticks):
 | 
						|
    return Time(*time.localtime(ticks)[3:6])
 | 
						|
 | 
						|
def TimestampFromTicks(ticks):
 | 
						|
    return Timestamp(*time.localtime(ticks)[:6])
 | 
						|
 | 
						|
_deprecated_version_info = tuple(map(int, _deprecated_version.split(".")))
 | 
						|
sqlite_version_info = tuple([int(x) for x in sqlite_version.split(".")])
 | 
						|
 | 
						|
Binary = memoryview
 | 
						|
collections.abc.Sequence.register(Row)
 | 
						|
 | 
						|
def register_adapters_and_converters():
 | 
						|
    from warnings import warn
 | 
						|
 | 
						|
    msg = ("The default {what} is deprecated as of Python 3.12; "
 | 
						|
           "see the sqlite3 documentation for suggested replacement recipes")
 | 
						|
 | 
						|
    def adapt_date(val):
 | 
						|
        warn(msg.format(what="date adapter"), DeprecationWarning, stacklevel=2)
 | 
						|
        return val.isoformat()
 | 
						|
 | 
						|
    def adapt_datetime(val):
 | 
						|
        warn(msg.format(what="datetime adapter"), DeprecationWarning, stacklevel=2)
 | 
						|
        return val.isoformat(" ")
 | 
						|
 | 
						|
    def convert_date(val):
 | 
						|
        warn(msg.format(what="date converter"), DeprecationWarning, stacklevel=2)
 | 
						|
        return datetime.date(*map(int, val.split(b"-")))
 | 
						|
 | 
						|
    def convert_timestamp(val):
 | 
						|
        warn(msg.format(what="timestamp converter"), DeprecationWarning, stacklevel=2)
 | 
						|
        datepart, timepart = val.split(b" ")
 | 
						|
        year, month, day = map(int, datepart.split(b"-"))
 | 
						|
        timepart_full = timepart.split(b".")
 | 
						|
        hours, minutes, seconds = map(int, timepart_full[0].split(b":"))
 | 
						|
        if len(timepart_full) == 2:
 | 
						|
            microseconds = int('{:0<6.6}'.format(timepart_full[1].decode()))
 | 
						|
        else:
 | 
						|
            microseconds = 0
 | 
						|
 | 
						|
        val = datetime.datetime(year, month, day, hours, minutes, seconds, microseconds)
 | 
						|
        return val
 | 
						|
 | 
						|
 | 
						|
    register_adapter(datetime.date, adapt_date)
 | 
						|
    register_adapter(datetime.datetime, adapt_datetime)
 | 
						|
    register_converter("date", convert_date)
 | 
						|
    register_converter("timestamp", convert_timestamp)
 | 
						|
 | 
						|
register_adapters_and_converters()
 | 
						|
 | 
						|
# Clean up namespace
 | 
						|
 | 
						|
del(register_adapters_and_converters)
 | 
						|
 | 
						|
def __getattr__(name):
 | 
						|
    if name in _deprecated_names:
 | 
						|
        from warnings import warn
 | 
						|
 | 
						|
        warn(f"{name} is deprecated and will be removed in Python 3.14",
 | 
						|
             DeprecationWarning, stacklevel=2)
 | 
						|
        return globals()[f"_deprecated_{name}"]
 | 
						|
    raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
 |