| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864 |
- import xml.etree.ElementTree as ET
- from typing import Union
- from fastapi import FastAPI
- import os
- import uuid
- import re
- import zipfile
- import json
- from fastapi.middleware.cors import CORSMiddleware
- from fastapi.middleware.gzip import GZipMiddleware
- from sentence_transformers import SentenceTransformer
- model = SentenceTransformer("BAAI/bge-small-zh-v1.5")
- import base64
- from pydantic import BaseModel
- from subdir import service
- from subdir import db
- from subdir import util
- import xml.dom.minidom as MD
- import numpy as np
- from fastapi.staticfiles import StaticFiles
- from pymongo import AsyncMongoClient
- client = AsyncMongoClient()
- from fastapi.responses import FileResponse
- from fastapi_cache import FastAPICache
- from inmemory import InMemoryBackend
- from fastapi_cache.decorator import cache
- from contextlib import asynccontextmanager
- from fastapi import WebSocket, WebSocketDisconnect
- from fastapi import UploadFile
- from collections.abc import AsyncIterator
- class ConnectionManager:
- """Class defining socket events"""
- def __init__(self):
- """init method, keeping track of connections"""
- self.active_connections = []
-
- async def connect(self, websocket: WebSocket):
- """connect event"""
- await websocket.accept()
- self.active_connections.append(websocket)
- async def send_personal_message(self, message: str, websocket: WebSocket):
- """Direct Message"""
- await websocket.send_text(message)
-
- def disconnect(self, websocket: WebSocket):
- """disconnect event"""
- self.active_connections.remove(websocket)
- @asynccontextmanager
- async def lifespan(_: FastAPI) -> AsyncIterator[None]:
- FastAPICache.init(InMemoryBackend(), prefix="default")
- yield
- app = FastAPI(lifespan=lifespan)
- origins = [
- "http://localhost.tiangolo.com",
- "https://localhost.tiangolo.com",
- "http://localhost",
- "http://localhost:9002",
- "http://127.0.0.1:9002",
- ]
- app.add_middleware(
- CORSMiddleware,
- allow_origins=["*"],
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
- )
- ##app.add_middleware(GZipMiddleware, minimum_size=1000, compresslevel=5)
- ##app.mount("/static", StaticFiles(directory="front/dist"), name="static")
- ##manager = ConnectionManager()
- class Info(BaseModel):
- name: str
- class DingeshuRequest(BaseModel):
- value: int
- class DingeXilieRequest(BaseModel):
- value: int
- id: str
- class SingleDingeXilieRequest(BaseModel):
- zhuanye: int
- debh: str
- class InfoWithID(BaseModel):
- name: str
- id: str
- class Tiaojia(BaseModel):
- biao_id: str
- bh: str
- bm: str
- mingcheng: str
- danwei: str
- jiage: str
- glf: str
- lr: str
- bz: int
- class SearchDe(BaseModel):
- zhuanye: str
- text: str
- class UpdateZjcs(BaseModel):
- biao_id: str
- bh: str
- mc: str
- fl: str
-
- @app.post("/outline2")
- async def read_root2(info: Info):
-
- return await db.getOutline(client, info.name)
- @app.post("/detail2")
- async def read_detail2(info: Info):
-
- return await db.getDetail(client, info.name)
- @app.post("/baojiahuizong2/")
- async def read_bjhz2(info: InfoWithID):
-
- raw = await db.getBjhz(client, info.name, info.id)
- raw2 = []
- for entry in raw:
- if "__children" in entry:
- entry["_children"] = entry["__children"]
- for grandchild in entry["_children"]:
- if "__children" in grandchild:
- grandchild['_children'] = grandchild['__children']
- del grandchild['__children']
- del entry["__children"]
- raw2.append(entry)
- return raw2
- @app.post("/guifeishuijin2/")
- async def read_gfsj2(info: InfoWithID):
- raw = await db.getGfsj(client, info.name, info.id)
- raw2 = []
- for entry in raw:
- if "__children" in entry:
- entry["_children"] = entry["__children"]
- del entry["__children"]
- raw2.append(entry)
- return raw2
- @app.post("/qitaxiangmu2/")
- async def read_qtxm2(info: InfoWithID):
- raw = await db.getQtxm(client, info.name, info.id)
- raw2 = []
- for entry in raw:
- if "__children" in entry:
- entry["_children"] = entry["__children"]
- del entry["__children"]
- raw2.append(entry)
- return raw2
- @app.post("/zygczgj/")
- async def zygczgj(info: InfoWithID):
- return await db.getZygczgj(client, info.name, info.id)
- @app.post("/zanliejine2/")
- async def read_zlje2(info: InfoWithID):
- return await db.getZlje(client, info.name, info.id)
- @app.post("/jirigong2/")
- async def read_jrg2(info: InfoWithID):
- return await db.getJrg(client, info.name, info.id)
- @app.post("/zongchengbaofuwufei2/")
- async def read_zcbfwf2(info: InfoWithID):
- return await db.getZcbfwf(client, info.name, info.id)
- @app.post("/fabaorengongyingcailiao2/")
- async def read_fbrgycl2(info: InfoWithID):
- return await db.getFbrgycl(client, info.name, info.id)
- @app.post("/rencaijihuizong2/")
- async def read_rcjhz2(info: InfoWithID):
- return await db.getRcjhz(client, info.name, info.id)
- @app.post("/qingdanxiangmu2/")
- async def read_qdxm2(info: InfoWithID):
-
- return await db.getQdxm(client, info.name, info.id)
- class Item(BaseModel):
- bh: str
- bt: str
- name: str
- class Rcj(BaseModel):
- bh: str
- bt: str
- bm: str
- name: str
- class Dercj(BaseModel):
- bh: str
- bt: str
- qdbm: str
- debm: str
- name: str
- class Zjcs(BaseModel):
- bh: str
- name: str
- @app.post("/qingdanmingxi/")
- async def read_qdmx(item : Item):
- return await db.getQdmx(client, item.name, item.bh, item.bt)
- @app.post("/qingdanrcj/")
- async def read_rcj(item : Rcj):
- if item.bt == "Djcs":
- return await db.getDjcsQingdanrcj(client, item.name, item.bh, item.bt, item.bm)
- return await db.getQingdanrcj(client, item.name, item.bh, item.bt, item.bm)
- @app.get("/qingdantuijian/{bm}")
- @cache(expire=86400)
- async def read_tuijian(bm: str):
-
-
- return service.getQingdanTuijian("", "", bm)
- @app.post("/dingercj/")
- async def read_dercj(item : Dercj):
- if item.bt == "Djcs":
- return await db.getDjcsDingercj(client, item.name, item.bh, item.bt, item.qdbm, item.debm)
-
- return await db.getDingercj(client, item.name, item.bh, item.bt, item.qdbm, item.debm)
- @app.post("/zjcs/")
- async def read_zjcs(item : Zjcs):
- raw = await db.getZjcs(client, item.name, item.bh)
- raw2 = []
- for entry in raw:
- if "__children" in entry:
- entry["_children"] = entry["__children"]
- del entry["__children"]
- raw2.append(entry)
- return raw2
- @app.post("/djcs/")
- async def read_djcs(item : Zjcs):
- raw = await db.getDjcs(client, item.name, item.bh)
- raw2 = []
- for entry in raw:
- if "__children" in entry:
- entry["_children"] = entry["__children"]
- del entry["__children"]
- raw2.append(entry)
- return raw2
- @app.post("/files2/")
- async def read_files2():
- result = await db.list_files(client)
- return result
- @app.post("/deleteFile/")
- async def delete(r: Info):
- result = await db.delete_files(client, r.name)
- return result
- @app.get("/des/{value}")
- @cache(expire=86400)
- async def read_des(value: int):
- result = service.getDes(value)
- if value == 30:
- result.append({
- "id": "2075",
- "key" : "2075",
- "value" : "2075",
- "label" : "安装费用",
- "title" : "安装费用",
- "children" : [
- {
- "id": "2076",
- "key" : "2076",
- "value" : "2076",
- "label" : "脚手架搭拆费",
- "title" : "脚手架搭拆费",
- "children" : []
- },
- {
- "id": "2077",
- "key" : "2077",
- "value" : "2077",
- "label" : "施工超高增加费",
- "title" : "施工超高增加费",
- "children" : []
- },
- {
- "id": "2078",
- "key" : "2078",
- "value" : "2078",
- "label" : "安装生产同时增加费",
- "title" : "安装生产同时增加费",
- "children" : []
- },
- {
- "id": "2079",
- "key" : "2079",
- "value" : "2079",
- "label" : "有害环境操作增加费",
- "title" : "有害环境操作增加费",
- "children" : []
- },
- {
- "id": "2080",
- "key" : "2080",
- "value" : "2080",
- "label" : "高层建筑增加费",
- "title" : "高层建筑增加费",
- "children" : [
- {
- "id": "2081",
- "key" : "2081",
- "value" : "2081",
- "label" : "第四册",
- "title" : "第四册",
- "children" : []
- },
- {
- "id": "2082",
- "key" : "2082",
- "value" : "2082",
- "label" : "第五册",
- "title" : "第五册",
- "children" : []
- },
- {
- "id": "2083",
- "key" : "2083",
- "value" : "2083",
- "label" : "第七册",
- "title" : "第七册",
- "children" : []
- },
- {
- "id": "2084",
- "key" : "2084",
- "value" : "2084",
- "label" : "第九册",
- "title" : "第九册",
- "children" : []
- },
- {
- "id": "2085",
- "key" : "2085",
- "value" : "2085",
- "label" : "第十册",
- "title" : "第十册",
- "children" : []
- },
- {
- "id": "2086",
- "key" : "2086",
- "value" : "2086",
- "label" : "第十一册",
- "title" : "第十一册",
- "children" : []
- },
- ]
- },
- {
- "id": "2087",
- "key" : "2087",
- "value" : "2087",
- "label" : "系统调试费",
- "title" : "系统调试费",
- "children" : []
- },
- ]
- })
- return result
- @app.get("/pbs/{value}")
- @cache(expire=86400)
- async def read_pbs(value:int):
- result = service.getPbs(value)
- #print(result)
- result.insert(0, {"id": "0","key": "0", "label": "全部", "title": "全部"})
- return result
- @app.get("/pbxl/{name}")
- @cache(expire=86400)
- async def read_pbxl(name: str):
- result = service.getPbxl(name)
- #print(result)
- return result
- @app.get("/cankao/")
- @cache(expire=86400)
- async def cankao():
- result = service.getCankao()
- #print(result)
- return result
- @app.post("/qufei/")
- async def read_qufei(r: Info):
- return await db.getQufei(client, r.name)
- @app.post("/jiagongcai/")
- async def read_jiagongcai(r: Info):
- return await db.getJiagongcai(client, r.name)
- @app.get("/dexilie/{value}/{id}")
- @cache(expire=86400)
- async def read_dexilie(value: int, id: str):
- if value == 30 and int(id) > 2074:
- return service.getDeXilie_azfy(value, id)
- result = service.getDeXilie(value, id)
- #print(result)
- return result
- @app.get("/singledexilie2/{zhuanye}/{debh}")
- @cache(expire=86400)
- async def read_singledexilie2(zhuanye: int, debh: str):
- if debh.startswith("D") :
- return json.dumps({
- "reverse": "None",
- "rgde": None,
- "jxde": None,
- "clde": None,
- "actual_zhuanye": zhuanye,
- "bz_selected": {"BZBH": {}},
- "bz_selected2": {"BZBH": {}}
- }, ensure_ascii=False)
- if "-F" in debh:
- return service.read_singledexilie_azfy(debh)
- r_debh = debh.split("!")[0]
- print(r_debh)
- result1, result2, rgde, jxde, clde, bz_selected, bz_selected2, actual_zhuanye= service.getSingleDeXilie(zhuanye, r_debh)
- print("get result ***************************************")
- if result1:
- result3 = json.loads(result1)
- else:
- result3 = {}
- result3["reverse"] = str(result2)
- result3["rgde"] = rgde
- result3["jxde"] = jxde
- result3["clde"] = clde
- result3["actual_zhuanye"] = actual_zhuanye
- if bz_selected != None:
- result3["bz_selected"] = json.loads(bz_selected)
- else:
- result3["bz_selected"] = {"BZBH": {}}
- if bz_selected2 != None:
- result3["bz_selected2"] = json.loads(bz_selected2)
- else:
- result3["bz_selected2"] = {"BZBH": {}}
- ####14-227+[14-228]*-2
- ####3-409*2
- print(r_debh)
- if "[" in r_debh:
- position3 = r_debh.find("*")
- coef = 1
- if position3 == -1:
- pass
- else:
- coef = r_debh[1 + position3:]
- print(coef)
- tail = 0
- for i in range(0, len(coef) + 1):
- if i == len(coef):
- tail = i
- break
- if (coef[i] > '9' or coef[i] < '0') and coef[i] != '-':
- tail = i
- break
- if tail == 0:
- print("1113111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- coef = int(coef[0:tail])
- position1 = r_debh.find("[")
- position2 = r_debh.find("]")
- if position2 == -1:
- print("1121111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- if r_debh[position1-1] == "+":
- pass
- elif r_debh[position1-1] == "-":
- coef = -coef
- else:
- print("111111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- debh = r_debh[position1+1: position2]
- if result3['GLDE']: ##csv文件里的字段,表示这个定额有没有配套的增减定额
- hit = False
- for key, value in result3['GLDE'].items():
- if value == debh:
- hit = True
- if not hit:
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- else:
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- result1_, result2_, rgde_, jxde_, clde_, bz_selected_, bz_selected2_, actual_zhuanye_ = service.getSingleDeXilie(zhuanye, debh)
- if result1_:
- util.mergerg(rgde, rgde_, coef)
- util.mergejx(jxde, jxde_, coef)
- util.mergecl(clde, clde_, coef)
- result3["rgde"] = rgde
- result3["jxde"] = jxde
- result3["clde"] = clde
- item_ = None
- for item in result3['DW'].keys():
- item_ = item
- result3['DEBH'] = {item_: util.cleanBM(r_debh)}
- else:
- result3["reverse"] = 'None'
- elif "*" in r_debh:##1-234*2
- position3 = r_debh.find("*")
- coef = 1
-
- coef = r_debh[1 + position3:]
- print(coef)
- tail = 0
- for i in range(0, len(coef) + 1):
- if i == len(coef):
- tail = i
- break
- if (coef[i] > '9' or coef[i] < '0') and coef[i] != '-':
- tail = i
- break
- if tail == 0:
- print("1113111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- coef = int(coef[0:tail])
- util.multirg(result3["rgde"], coef)
- util.multijx(result3["jxde"], coef)
- util.multicl(result3["clde"], coef)
- item_ = None
- for item in result3['DW'].keys():
- item_ = item
- result3['DEBH'] = {item_: (r_debh)}
- print(result3)
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- @app.get("/singledexilie/{zhuanye}/{debh}/{mc}")
- @cache(expire=86400)
- async def read_singledexilie(zhuanye: int, debh: str, mc: str):
- if debh.startswith("D") :
- return json.dumps({
- "reverse": "None",
- "rgde": None,
- "jxde": None,
- "clde": None,
- "actual_zhuanye": zhuanye,
- "bz_selected": {"BZBH": {}},
- "bz_selected2": {"BZBH": {}}
- }, ensure_ascii=False)
- if "-F" in debh:
- return service.read_singledexilie_azfy(debh)
- r_debh = debh.split("!")[0]
- print(r_debh)
- result1, result2, rgde, jxde, clde, bz_selected, bz_selected2, actual_zhuanye= await db.getSingleDeXilie(model, client, zhuanye, r_debh, mc)
- print("get result ***************************************")
- if result1:
- result3 = json.loads(result1)
- else:
- result3 = {}
- result3["reverse"] = str(result2)
- result3["rgde"] = rgde
- result3["jxde"] = jxde
- result3["clde"] = clde
- result3["actual_zhuanye"] = actual_zhuanye
- if bz_selected != None:
- result3["bz_selected"] = json.loads(bz_selected)
- else:
- result3["bz_selected"] = {"BZBH": {}}
- if bz_selected2 != None:
- result3["bz_selected2"] = json.loads(bz_selected2)
- else:
- result3["bz_selected2"] = {"BZBH": {}}
- ####14-227+[14-228]*-2
- ####3-409*2
- print(r_debh)
- if "[" in r_debh:
- position3 = r_debh.find("*")
- coef = 1
- if position3 == -1:
- pass
- else:
- coef = r_debh[1 + position3:]
- print(coef)
- tail = 0
- for i in range(0, len(coef) + 1):
- if i == len(coef):
- tail = i
- break
- if (coef[i] > '9' or coef[i] < '0') and coef[i] != '-':
- tail = i
- break
- if tail == 0:
- print("1113111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- coef = int(coef[0:tail])
- position1 = r_debh.find("[")
- position2 = r_debh.find("]")
- if position2 == -1:
- print("1121111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- if r_debh[position1-1] == "+":
- pass
- elif r_debh[position1-1] == "-":
- coef = -coef
- else:
- print("111111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- debh = r_debh[position1+1: position2]
- if result3['GLDE']: ##csv文件里的字段,表示这个定额有没有配套的增减定额
- hit = False
- for key, value in result3['GLDE'].items():
- if value == debh:
- hit = True
- if not hit:
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- else:
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- result1_, result2_, rgde_, jxde_, clde_, bz_selected_, bz_selected2_, actual_zhuanye_ = await db.getSingleDeXilie(model, client, zhuanye, debh, mc)
- if result1_:
- util.mergerg(rgde, rgde_, coef)
- util.mergejx(jxde, jxde_, coef)
- util.mergecl(clde, clde_, coef)
- result3["rgde"] = rgde
- result3["jxde"] = jxde
- result3["clde"] = clde
- item_ = None
- for item in result3['DW'].keys():
- item_ = item
- result3['DEBH'] = {item_: util.cleanBM(r_debh)}
- else:
- result3["reverse"] = 'None'
- elif "*" in r_debh:##1-234*2
- position3 = r_debh.find("*")
- coef = 1
-
- coef = r_debh[1 + position3:]
- print(coef)
- tail = 0
- for i in range(0, len(coef) + 1):
- if i == len(coef):
- tail = i
- break
- if (coef[i] > '9' or coef[i] < '0') and coef[i] != '-':
- tail = i
- break
- if tail == 0:
- print("1113111")
- result3["reverse"] = 'None'
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- coef = int(coef[0:tail])
- util.multirg(result3["rgde"], coef)
- util.multijx(result3["jxde"], coef)
- util.multicl(result3["clde"], coef)
- item_ = None
- for item in result3['DW'].keys():
- item_ = item
- result3['DEBH'] = {item_: (r_debh)}
- print(result3)
- return json.dumps(service.chaifen(result3, actual_zhuanye), ensure_ascii=False)
- @app.post("/save/")
- async def save(r: Info):
- data = json.loads(r.name)
- ##print(data)
-
- return await db.save(client, data)
- @app.post("/savedjcs/")
- async def savedjcs(r: Info):
- data = json.loads(r.name)
- ##print(data)
-
- return await db.savedjcs(client, data)
- @app.post("/applyFL/")
- async def applyFL(r: InfoWithID):
- data = json.loads(r.name)
- print(data)
-
- return await db.applyFL(client, r.id, data)
- @app.post("/tiaojia/")
- async def tiaojia(r: Tiaojia):
- ##return []
- glf = r.glf
- lr = r.lr
- if r.glf == '':
- glf = '0'
- if r.lr == "":
- lr = '0'
- return await db.tiaojia(client, r.biao_id, r.bh, r.bm, r.mingcheng, r.danwei, r.jiage, glf, lr, r.bz)
- @app.post("/searchde/")
- async def searchde(r: SearchDe):
- ##return []
-
- return await db.searchde(client, r.zhuanye, r.text)
- @app.post("/updatezjcs/")
- async def updatezjcs(r: UpdateZjcs):
- ##return []
-
- return await db.updatezjcs(client, r.biao_id, r.bh, r.mc, r.fl)
- @app.post("/upload/")
- async def upload(file: UploadFile):
- if file.filename.endswith('13jz') or file.filename.endswith("13jt"):
- content = await file.read()
- string = content.decode('utf-8')
- await resolve(string)
- return [file.filename]
- elif file.filename.endswith("jszf"):
- content = await file.read()
- string = content.decode('utf-8')
- root = ET.fromstring(string)
- for child in root:
- print(child)
- if child.tag == "ZBFileContent":
- base64_bytes = child.text.encode("ascii")
- sample_string_bytes = base64.b64decode(base64_bytes)
- tmp = str(uuid.uuid4())
- os.mkdir(os.path.join("tmp", tmp))
- with open(tmp, "wb") as file_:
- file_.write(sample_string_bytes)
- with zipfile.ZipFile(tmp, 'r') as zip_ref:
- zip_ref.extractall(os.path.join("tmp", tmp))
- dir_list = os.listdir(os.path.join("tmp", tmp))
- print(dir_list)
- for entry in dir_list:
- if entry.endswith("13jz"):
- with open(os.path.join("tmp", tmp, entry), 'r') as f:
- await resolve(f.read())
- return [file.filename]
- else:
- return [file.filename]
-
-
- @app.get("/download/{item_id}")
- async def download_file(item_id):
- file_path = "export/contacts.xml.b"
- # Create the root element
- root = ET.Element("JingJiBiao")
- # Create a sub-element
- ##TouBiaoXx = ET.SubElement(root, "TouBiaoXx")
- await db.build(client, root, item_id)
-
- # Create the tree and write to a file
- tree = ET.ElementTree(root)
- tree.write("export/contacts.xml", encoding="utf-8")
- dom = MD.parse("export/contacts.xml")
-
- with open("export/contacts.xml.b", 'w') as f:
- f.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n")
- content = (dom.toprettyxml(indent=" "))
- content_ = content.split("\n")
- f.write("\n".join(content_[1:]))
-
- return FileResponse(file_path, media_type='application/octet-stream', filename="contacts.xml")
-
- async def resolve(data):
- await db.resolve(data, client)##manager.send_personal_message(f"You wrote: {data}", websocket)
- ##@app.websocket("/ws")
- ##async def websocket_endpoint(websocket: WebSocket):
- ## await manager.connect(websocket)
- ## try:
- ## while True:
- ## data = await websocket.receive_text()
- ## await resolve(websocket, data)
- ## ##await manager.broadcast(f"Client #{client_id} says: {data}")
- ## except WebSocketDisconnect:
- ## manager.disconnect(websocket)
- ## ##await manager.broadcast(f"Client left the chat")
|