Python odata API

2024-10-03 15:35:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个python类,它将使用devextreme odata数据存储。在

这是我的ODataAPI类:

from sqlalchemy.orm import load_only

from casservices import db
import models

class ODataAPI:
  def __init__(self, model):
    self.model = model

  def get(self, cfg):
    #"""
    #config options
    #sort = string of "param_name desc" - if desc is missing, sort asc
    #take   = int limit amount of results
    #skip   = int number of items to skip ahead
    #filter = e.g. (substringof('needle',name)) or (role eq 'needle') or (substringof('needle',email)) or (job eq 'needle') or (office eq 'needle')
    #select = csv of entities to return
    #"""

    q = db.session.query(self.model)

    if cfg.get('$select') is not None:
      splt = cfg.get('$select').split(",")
      q.options(load_only(*splt))

    if cfg.get('$filter') is not None:
      NEED CODE HERE TO PARSE $filter

    if cfg.get('$orderby') is not None:
      splt = cfg.get('$orderby').split(" ")
      order_direction = "ASC"
      if len(splt) == 2 and splt[1] == 'desc':
        order_direction = "DESC"
      order_string = "%s.%s %s" % (self.model.__tablename__, splt[0], order_direction)
      q = q.order_by(order_string)

    if cfg.get('$top') is not None:
      q = q.limit(cfg.get('$top'))

    if cfg.get('$skip') is not None:
      q = q.offset(cfg.get('$skip'))

    items = q.all()

    total_items = db.session.query(self.model).count()

    data = {
      "d":{
        "__count": total_items,
        "results": [i.as_dict() for i in items]
        }
    }

    return data

如何将以下字符串解析为可用于筛选集合的内容?在

get参数如下所示:

^{pr2}$

Tags: orofselfnonegetmodelifis