Skip to main content

A simple library for read/write access to OData services.

Project description

python-odata

A simple library for read/write access to OData services.

  • Supports OData version 4.0
  • Requires JSON format support from the service
  • Should work on both Python 2.x and 3.x

Documentation

Available on readthedocs.org

Dependencies

  • requests >= 2.0
  • python-dateutil
  • rich >= 13.3.1

Demo

Northwind ODATA service

Reading data from the Northwind service.

import requests
from datetime import datetime

# you can only import this on the second run, the first run will create the package
# import generated 
from odata import ODataService
session = requests.Session()

url = 'http://services.odata.org/V4/Northwind/Northwind.svc/'
service = ODataService(
    url="http://services.odata.org/V4/Northwind/Northwind.svc/",
    session=session,
    base=generated.northwind.ReflectionBase,
    reflect_entities=True,
    reflect_output_package="generated.northwind")
OrderDetails = generated.northwind.Order_Details

q = service.query(generated.northwind.Customers)
q = q.filter(generated.northwind.Customers.ContactTitle.startswith('Sales'))
q = q.filter(generated.northwind.Customers.PostalCode == '68306')
data = q.first()

query = service.query(OrderDetails)
values = query.all()
values = query \
    .filter((OrderDetails.Order.Employee.HomePhone.contains("555")) | (OrderDetails.Order.Employee.City == "London")) \
    .filter(OrderDetails.Order.Employee.FirstName.lacks("Steven")) \
    .filter(OrderDetails.Order.OrderDate >= datetime(year=1990, month=5, day=1, hour=10, minute=10, second=59, tzinfo=pytz.UTC))\
    .expand(OrderDetails.Order, OrderDetails.Order.Employee) \
    .order_by(OrderDetails.Order.ShipCountry.asc()) \
    .limit(10) \
    .all()
for order_details in values:
    print(f"Order {order_details.OrderID}")
    service.values(order_details)
    service.values(order_details.Order)
    service.values(order_details.Order.Employee)
import datetime

Order = Service.entities['Order']
Employee = Service.entities['Employee']

empl = Service.query(Employee).first()

query = Service.query(Order)
query = query.filter(Order.ShipCity == 'Berlin')

for order in query:
    order.ShippedDate = datetime.datetime.utcnow() 
    order.Employee = empl
    Service.save(order)

TripPin ODATA service (v4)

OData V4 example with Enums.

import logging

import requests
import rich

# comment on first run so you get the generated package
import generated.trippin
from odata import ODataService

requests.packages.urllib3.disable_warnings()


def test_trippin(console):
    proxy = {'http': '', 'https': ''}

    session = requests.Session()

    session.trust_env = False
    session.verify = False
    session.proxies.update(proxy)

    service = ODataService(
        url="https://services.odata.org/v4/TripPinServiceRW",
        session=session,
        #base=generated.trippin.ReflectionBase,  # comment on first run
        #reflect_entities=True,
        reflect_output_package="generated.trippin")
    People = generated.trippin.People

    q = service.query(People)

    values = q.all()
    for value in values:
        console.rule(f"People {value.FirstName} {value.LastName}")
        service.values(value)


if __name__ == "__main__":
    logging.basicConfig(level="DEBUG")
    console = rich.console.Console()
    test_trippin(console)

Writing changes. Note that the real Northwind service is read-only and the data modifications do not work against it.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_odata-0.6.2.tar.gz (30.1 kB view details)

Uploaded Source

Built Distribution

python_odata-0.6.2-py3-none-any.whl (37.0 kB view details)

Uploaded Python 3

File details

Details for the file python_odata-0.6.2.tar.gz.

File metadata

  • Download URL: python_odata-0.6.2.tar.gz
  • Upload date:
  • Size: 30.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.9.13 Windows/10

File hashes

Hashes for python_odata-0.6.2.tar.gz
Algorithm Hash digest
SHA256 b5c236576a351bdf4c49f5992389f20722ec5e7822e12850a6488f0fd6388951
MD5 a621d5c385db3bfd34333dfe0624a5e9
BLAKE2b-256 0903bf2eaee3b4f4b90431262c1d1ce266ef48b031a592d3b5f17d36b43205e9

See more details on using hashes here.

File details

Details for the file python_odata-0.6.2-py3-none-any.whl.

File metadata

  • Download URL: python_odata-0.6.2-py3-none-any.whl
  • Upload date:
  • Size: 37.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.9.13 Windows/10

File hashes

Hashes for python_odata-0.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 87fbded7bb74cab542a52f1d4eb6cdfd017fdceb2ea5f47a8011aa408c67f485
MD5 84d4543d99daaadab12051ebbb91f2ee
BLAKE2b-256 d784b63c8d8625fbaf84723ed2cd052c279b6e0f753d2b99691975de985caf1f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page