import settings
import uuid
import json
import os
import json as default_json
from json.encoder import JSONEncoder
class MyJsonEncoder(JSONEncoder):
def default(self, o):
if isinstance(o,MySQL):
return o.__dict__
return JSONEncoder.default(self,o)
class MyJson(object):
@staticmethod
def dump(obj, fp):
return default_json.dump(obj, fp,cls=MyJsonEncoder) #自定义Json,使json 可以处理MySQL类的对象
class MySQL:
def __init__(self,host,port):
self.id=self.create_id()
self.host=host
self.port=port
def save(self):
if not self.is_exists:
raise PermissionError("yi cui zai ")
file_path=r'%s%s%s'%(settings.DB_PATH,os.sep,self.id)
# pickle.dump(self,open(file_path,'wb'))
# from lib.MYJSON import MyJson 出错
Python中可能会遇到 cannot import name ‘XXX’
错误,
其实这有可能出现再模块导入的顺序问题上,
比如:在A文件头执行到语句 from B import XXX
,
程序马上就会转到B文件中去,从头到尾顺序寻找B文件中的XXX函数,
而A文件就暂停执行,直到把XXX函数复制到内存中,
但B文件中的文件头可能也有导入,
如果B文件头中又导入了A文件中的函数,
由于XXX函数还没有被复制。
所以于A文件因为暂停执行而无法导入,就会出现上面的错误了。
MyJson.dump(self, open(file_path, 'w')) #self 就是一个MYSQL 的对相
@property
def is_exists(self):
tag=True
files=os.listdir(settings.DB_PATH)
for file in files:
file_abspath=r'%s%s%s'%(settings.DB_PATH,os.sep,file)
obj=json.load(open(file_abspath,'r'))
# try:
# obj=pickle.load(open(file_abspath,'rb'))
# except EOFError:
# return False
if obj['host'] == self.host and obj['port'] == self.port:
tag=False
break
return tag
@staticmethod
def get_obj_by_id(id):
file_path=r'%s%s%s'%(settings.DB_PATH,os.sep,id)
return json.load(open(file_path,'r'))
# return pickle.load(open(file_path,'rb'))
@staticmethod
def create_id():
return str(uuid.uuid1())
@classmethod
def from_conf(cls):
return cls(settings.HOST,settings.PORT)
# print(MySQL.from_conf())
# conn=MySQL.from_conf()
# print(type(conn))
# conn.save()
# res=conn.get_obj_by_id('ea6ebaf0-e68e-11e8-89fa-98541bbe06e4')
# print(res.host,res.port)
obj=MySQL('127.0.0.1','8090')
# print(obj,type(obj))
obj.save()