コード例 #1
0
async def note_delete(note_id: str, db: database.Session = Depends(get_db)):
    note = get_note(db, note_id)

    db.delete(note)
    db.commit()

    return RedirectResponse('/')
コード例 #2
0
def upgrade():
    sess = Session(bind=op.get_bind())
    # Ensure all genes have a uppercase instance
    uppercase_instances = {
        instance.symbol: instance
        for instance in models_05_8f87d34cbe90.Gene.resolve_set(
            sess, {
                symbol.upper()
                for (
                    symbol, ) in sess.query(models_05_8f87d34cbe90.Gene.symbol)
            })
    }
    # Explicitly set it on the instance to be sure (mysql)
    for instance in uppercase_instances.values():
        instance.symbol = instance.symbol.upper()
    sess.commit()
    # find all genes that must be transfered
    gene_to_remove = []
    geneset_genes_to_remove = []
    geneset_genes_to_add = []
    for gene in sess.query(models_05_8f87d34cbe90.Gene).filter(
            models_05_8f87d34cbe90.Gene.id.notin_(
                tuple(v.id for v in uppercase_instances.values()))):
        gene_to_remove.append(gene.id)
        for geneset in gene.genesets:
            geneset_genes_to_remove.append(
                dict(gene=gene.id, geneset=geneset.id))
            geneset_genes_to_add.append(
                dict(gene=uppercase_instances[gene.symbol.upper()].id,
                     geneset=geneset.id))

    # update m2m
    for item in geneset_genes_to_remove:
        sess.delete(sess.query(models_05_8f87d34cbe90.GenesetGene).get(item))
    for item in geneset_genes_to_add:
        sess.add(models_05_8f87d34cbe90.GenesetGene(**item))
    sess.commit()
    # add any orphaned genes to remove
    for gene in sess.query(models_05_8f87d34cbe90.Gene):
        if len(gene.genesets) == 0:
            gene_to_remove.append(gene.id)
    # update genes
    for item in set(gene_to_remove):
        sess.delete(sess.query(models_05_8f87d34cbe90.Gene).get(item))
    sess.commit()
def upgrade():
    sess = Session(bind=op.get_bind())
    # Ensure all drugs have a lowercase instance
    lowercase_instances = {
        instance.symbol: instance
        for instance in models_05_8f87d34cbe90.Drug.resolve_set(
            sess, {
                symbol.lower()
                for (
                    symbol, ) in sess.query(models_05_8f87d34cbe90.Drug.symbol)
            })
    }
    # Explicitly set it on the instance to be sure (mysql)
    for instance in lowercase_instances.values():
        instance.symbol = instance.symbol.lower()
    sess.commit()
    # find all drugs that must be transfered
    drug_to_remove = []
    drugset_drug_to_remove = []
    drugset_drug_to_add = []
    for drug in sess.query(models_05_8f87d34cbe90.Drug).filter(
            models_05_8f87d34cbe90.Drug.id.notin_(
                tuple(v.id for v in lowercase_instances.values()))):
        drug_to_remove.append(drug.id)
        for drugset in drug.drugsets:
            drugset_drug_to_remove.append(
                dict(drug=drug.id, drugset=drugset.id))
            drugset_drug_to_add.append(
                dict(drug=lowercase_instances[drug.symbol.lower()].id,
                     drugset=drugset.id))
    # update m2m
    for item in drugset_drug_to_remove:
        sess.delete(sess.query(models_05_8f87d34cbe90.DrugsetDrug).get(item))
    for item in drugset_drug_to_add:
        sess.add(models_05_8f87d34cbe90.DrugsetDrug(**item))
    sess.commit()
    # add any orphaned drugs to remove
    for drug in sess.query(models_05_8f87d34cbe90.Drug):
        if len(drug.drugsets) == 0:
            drug_to_remove.append(drug.id)
    # update drugs
    for item in set(drug_to_remove):
        sess.delete(sess.query(models_05_8f87d34cbe90.Drug).get(item))
    sess.commit()
コード例 #4
0
ファイル: houses.py プロジェクト: diyor28/pyduino
async def delete_house(pk: int, db: Session = Depends(get_db)):
    instance = db.query(House).get(pk)
    db.delete(instance)
    db.commit()
    return instance
コード例 #5
0
async def delete_relay(pk: int, db: Session = Depends(get_db)):
    instance = db.query(Relays).get(pk)
    db.delete(instance)
    db.commit()
    return instance
コード例 #6
0
ファイル: exports.py プロジェクト: diyor28/pyduino
async def delete_export(pk: int, db: Session = Depends(get_db)):
    instance: Download = db.query(Download).get(pk)
    db.delete(instance)
    db.commit()
    os.remove(os.path.join(BASE_DIR, instance.filename))
    return instance
コード例 #7
0
ファイル: sensors.py プロジェクト: diyor28/pyduino
async def delete_sensor(pk: int, db: Session = Depends(get_db)):
    instance = db.query(Sensor).get(pk)
    db.delete(instance)
    db.commit()
    return instance
コード例 #8
0
async def delete_demo(demo_id: int) -> Dict:
    session = Session()
    demo: Demo = demo_repo.get_demo_by_id(demo_id)
    session.delete(demo)
    return {"message": "删除成功"}
コード例 #9
0
class BaseHandler(RequestHandler):
    _datamodel_: BaseModel
    executor = ThreadPoolExecutor(30)

    def initialize(self):
        self.db_session = None
        self.page = Page(self)

    # 通过 id 获取数据

    def item(self, id):
        if not self._datamodel_:
            raise CodeError("重写该方法或定义 __database__ 属性")

        item = self._datamodel_.query.get(id)
        if item is None:
            raise NotFoundError("{}:{}".format(self._datamodel_.__tablename__,
                                               id))
        self.set_response(data=self.to_dict(item))

    def prepare(self):

        if self.request.method == "GET":
            if (len(self.path_args) or len(self.path_kwargs)) and \
                    not len(self.request.query_arguments):
                self.get = self.item

        self.get = self.run_in_thread(self.get)
        self.post = self.run_in_thread(self.post)
        self.delete = self.run_in_thread(self.delete)
        self.put = self.run_in_thread(self.put)

    def auth(self):
        pass

    def set_default_headers(self):
        self.set_header('Access-Control-Allow-Origin', 'http://127.0.0.1:8082')
        self.set_header('Access-Control-Allow-Credentials', 'true')
        self.set_header('Access-Control-Max-Age', 1000)
        self.set_header("Content-Type", "application/json; charset=UTF-8")
        self.set_header('Access-Control-Allow-Methods',
                        'POST, GET, OPTIONS, PUT, DELETE')
        self.set_header(
            'Access-Control-Allow-Headers',
            'authorization, Authorization, Content-Type, Access-Control-Allow-Origin, Access-Control-Allow-Headers, X-Requested-By, Access-Control-Allow-Methods'
        )

    def on_connection_close(self):
        pass

    def to_dict(self, query_results):
        if isinstance(query_results, list):
            return [result.to_dict() for result in query_results]

        else:
            return query_results.to_dict()

    async def options(self, *args, **kwargs):
        self.finish()

    def success_response(self, data=None, message=""):
        response = {
            "status_code": 0,
            "message": message,
            "data": data,
            "pageinfo": self.page.page_info
        }
        self.write(response)

    def error_response(self, message="", data=None, status_code=404):
        self.set_status(status_code)
        response = {
            "status_code": status_code,
            "data": data,
            "message": message or "",
            "pageinfo": self.page.page_info
        }
        self.write(response)

    def set_response(self, data=None, message="", status_code=200):
        self.response_data = {
            "status_code": status_code,
            "data": data or [],
            "message": message,
        }

    def run_in_thread(self, fun):
        """让method运行在线程中"""
        async def inner(*args, **kwargs):
            await run_on_executor()(self.run_one_thread(fun))(self, *args,
                                                              **kwargs)
            if hasattr(self, "response_data"):
                self.success_response(self.response_data.get("data"),
                                      self.response_data.get("message"))
                self.finish()
            return

        return inner

    def run_one_thread(self, fun):
        """在一个线程中运行,执行开始创建db_session,执行结束删除"""
        def inner(*args, **kwargs):
            if len(args):
                args = [arg for arg in args]
                args.pop(0)
            self.db_session = Session()
            self.auth()
            res = fun(*args, **kwargs)
            Session.remove()
            return res

        return inner

    def get_json_argument_all(self):
        if not hasattr(self.request, "json_argument"):
            self.load_json()
        return self.request.json_argument

    def get_json_argument(self, name, default: Any = _ARG_DEFAULT):
        if not hasattr(self.request, "json_argument"):
            self.load_json()
        if name not in self.request.json_argument:
            if isinstance(default, _ArgDefaultMarker):
                raise MissingArgumentError(name)
            return default
        arg = self.request.json_argument[name]
        return arg

    def load_json(self):
        try:
            self.request.json_argument = json.loads(self.request.body)
        except ValueError:
            msg = "Could not decode JSON: %s" % self.request.body
            raise HTTPError(400, msg, reason=msg)

    def write_error(self, status_code: int, **kwargs) -> None:
        """报错时返回"""
        if self.settings.get("serve_traceback") and "exc_info" in kwargs:
            # in debug mode, try to send a traceback
            self.set_header("Content-Type", "text/plain")
            for line in traceback.format_exception(*kwargs["exc_info"]):
                self.write(line)
            self.finish()
        else:
            reason = kwargs.get("reason")
            if "exc_info" in kwargs:
                exception = kwargs["exc_info"][1]
                if isinstance(exception, HTTPError) and exception.log_message:
                    reason = exception.log_message
                else:
                    reason = str(kwargs["exc_info"])
            self.error_response(reason, status_code=status_code)
            self.finish()

    def delete(self, id: str):
        obj = self._datamodel_.get_or_404(id)
        self.db_session.delete(obj)
        self.db_session.commit()
        return obj

    def update_all(self, obj, info, may_update):
        for key, value in info.items():
            if key in may_update:
                setattr(obj, key, value)
        return obj