U SW@sddlZddlZz ddlZWnek r8ddlZYnXddlTddlmZddlmZzddl m Z ddZ Wnek rddZ YnXe d e fiZe d d d ZGd ddeZGddde ZGdddeZGdddeZdS)N)*)Node) PickledField APSWDatabasecKs t|f|SNrZdb_namekwargsr /kv.pyKeyValueDatabasesr cKst|fddi|S)NZcheck_same_threadF)SqliteDatabaserr r r r sSentinelz:memory:F)Z threadlocalsc@seZdZddZddZdS) JSONFieldcCs t|Sr)jsondumpsselfvaluer r r db_valueszJSONField.db_valuecCs|dk rt|SdSr)rloadsrr r r python_valueszJSONField.python_valueN)__name__ __module__ __qualname__rrr r r r rsrc@seZdZdZd&ddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd'd d!Zefd"d#Zd$d%ZdS)(KeyStorea# Rich dictionary with support for storing a wide variety of data types. :param peewee.Field value_type: Field type to use for values. :param boolean ordered: Whether keys should be returned in sorted order. :param peewee.Model model: Model class to use for Keys/Values. FNcCsb||_||_|pt|_|j|_||_|jj|_|jj |_ |j |jdt |jt |_ dS)NT) _value_field_ordered key_value_db _databaseZcompilerZ _compiler create_modelmodelkeyrZ create_table isinstancer _native_upsert)rZ value_fieldordereddatabaser r r __init__(s     zKeyStore.__init__csGfdddt}|S)Ncs0eZdZedddZjZGfdddZdS)z&KeyStore.create_model..KVModelT)Z max_lengthZ primary_keycseZdZjZdS)z+KeyStore.create_model..KVModel.MetaN)rrrrr&r rr r Meta;sr*N)rrrZ CharFieldr"rrr*r r)r r KVModel7s r+)ZModel)rr+r r)r r 6szKeyStore.create_modelcGs&|jj|}|jr"||j}|Sr)r!selectZtuplesrZorder_byr")rr,queryr r r r-@s zKeyStore.querycCs t|ts|j|kdfS|dfS)NTF)r#rr")rnoder r r convert_nodeFs zKeyStore.convert_nodecCs"||\}}|j|Sr)r/r!r,whereexists)rr"r._r r r __contains__KszKeyStore.__contains__cCs|jSr)r!r,countr)r r r __len__OszKeyStore.__len__csf||\}}||j|}tdfdd|D}t|dkrV|rVt|n |rb|dS|S)Nrcsg|] }|qSr r ).0valZ item_getterr r Vsz(KeyStore.__getitem__..)r/r-rr0operator itemgetterlenKeyError)rr. converted is_singleresultr r8r __getitem__Rs  zKeyStore.__getitem__cCs*|jjf|jj||jj|idSr)r!insertr"namerZupsertexecute)rr"rr r r _upsert]s zKeyStore._upsertcCst|tr0|jj|i}|jjf||nf|jrD| ||nRz|jj ||dWn<|j |jjf|jj|i|j |kYnXdS)N)r"r)r#rrrCr!updater0rDr$rEZcreaterZrollbackr")rr.rrFr r r __setitem__bs    zKeyStore.__setitem__cCs&||\}}|j|dSr)r/r!deleter0rD)rr.r>r2r r r __delitem__rszKeyStore.__delitem__cCs |Sr)r-rDr)r r r __iter__vszKeyStore.__iter__cCsttd||jSNr)mapr:r;r-r"r)r r r keysysz KeyStore.keyscCsttd||jSrK)rLr:r;r-rr)r r r values|szKeyStore.valuescCst|Sr)iterr)r r r itemsszKeyStore.itemscCs(z ||WStk r"|YSXdSr)r=)rkdefaultr r r gets z KeyStore.getc Csj|jV||\}}z ||}Wn.tk rT|tkr@|YW5QRSX||=W5QRX|Sr)rZ transactionr/r=r)rrQrRr.r?resr r r pops  z KeyStore.popcCs|jdSr)r!rHrDr)r r r clearszKeyStore.clear)FN)N)rrr__doc__r'r r-r/r3r5rArErGrIrJrMrNrPrSrrUrVr r r r r s$     rcseZdZdfdd ZZS)PickledKeyStoreFNcstt|t||dSr)superrXr'r)rr%r& __class__r r r's  zPickledKeyStore.__init__)FNrrrr' __classcell__r r rZr rXsrXcseZdZdfdd ZZS) JSONKeyStoreFNcs"tdd}tt||||dS)NT)Znull)rrYr^r')rr%r&ZfieldrZr r r's zJSONKeyStore.__init__)FNr\r r rZr r^sr^)r:pickleZ simplejsonr ImportErrorZpeeweerZplayhouse.fieldsrZplayhouse.apsw_extrr typeobjectrrZ TextFieldrrrXr^r r r r s&      x