From eeb727ff7da309a3102037cb8cf15e07b109600d Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 22 Jan 2019 22:01:09 +0100 Subject: [PATCH 01/19] doc: clarify goals --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b96f2fd9..148054cf 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ # python-pyodata -Enterprise-ready Python OData client +Enterprise-ready Python OData client which provides comfortable Python agnostic +way for communication with OData services. + +The goal of this Python module is to hide all OData protocol implementation +details. ## Requirements From 5606e437491cda072317b6c66c6d1fdce874a603 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 22 Jan 2019 22:20:13 +0100 Subject: [PATCH 02/19] doc: add hyperlinked requirements --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 148054cf..d5e2a84a 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,11 @@ details. ## Requirements -- Python 3.6 +- [Python >= 3.6](https://www.python.org/downloads/release/python-368/) +- [requests == 2.20.0](https://pypi.org/project/requests/2.20.0/) +- [enum34 >= 1.0.4](https://pypi.org/project/enum34/) +- [funcsigs >= 1.0.2](https://pypi.org/project/funcsigs/) +- [lxml >= 3.7.3](https://pypi.org/project/lxml/) ## Usage From 4fd444b981e9ec5381f75b6f871a8f71779b35f6 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 22 Jan 2019 22:37:47 +0100 Subject: [PATCH 03/19] doc: add download and installation --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index d5e2a84a..c0f084ea 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,26 @@ details. - [funcsigs >= 1.0.2](https://pypi.org/project/funcsigs/) - [lxml >= 3.7.3](https://pypi.org/project/lxml/) +## Download and Installation + +You can obtain the latest version for this repository as [ZIP archive](https://github.com/SAP/python-pyodata/archive/master/pyodata.zip). + +You can also use [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) to clone and pull the repository. + +```bash +git clone https://github.com/SAP/python-pyodata.git +``` + +To make the pyodata Python module available in your projects, you need to +install the sub-directory __pyodata__ into [the Module Search Path](https://docs.python.org/3/tutorial/modules.html#the-module-search-path). + +You can make use of [pip](https://packaging.python.org/tutorials/installing-packages/#installing-from-vcs) +to install the pyodata module automatically: + +```bash +pip install -e git+https://github.com/SAP/python-pyodata.git +``` + ## Usage ### Get the service From 181b406f68cb0e6d3a82f9da484d9d8f5bef0c6f Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 22 Jan 2019 22:40:51 +0100 Subject: [PATCH 04/19] doc: let users know that there are no post-intall steps --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index c0f084ea..308f7df4 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,11 @@ to install the pyodata module automatically: pip install -e git+https://github.com/SAP/python-pyodata.git ``` +## Configuration + +You can start building your OData projects straight away after installing the +Python module without any additional configuration steps needed. + ## Usage ### Get the service From f897f864cb5713c747b12b56b8e7da9a7c26040b Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 22 Jan 2019 22:45:35 +0100 Subject: [PATCH 05/19] doc: let users know about no limitations --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 308f7df4..987214df 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,10 @@ pip install -e git+https://github.com/SAP/python-pyodata.git You can start building your OData projects straight away after installing the Python module without any additional configuration steps needed. +## Limitations + +There have been no limitations discovered yet. + ## Usage ### Get the service From 6a8f1d1f10fb214c3bd9c53f5fc4de39a80c8f51 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 22 Jan 2019 22:51:10 +0100 Subject: [PATCH 06/19] doc: route users to GH Issues for know issues --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 987214df..8b9aad95 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,10 @@ Python module without any additional configuration steps needed. There have been no limitations discovered yet. +## Known Issues + +This projects is issue-free. Should you have any doubts, please, consult [our issue tracker](https://github.com/SAP/python-pyodata/issues). + ## Usage ### Get the service From 0e7b707810329c2c5fb5286edbbff6593000737e Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 22 Jan 2019 22:55:55 +0100 Subject: [PATCH 07/19] doc: document our willingness to help our users --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 8b9aad95..45250725 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,10 @@ There have been no limitations discovered yet. This projects is issue-free. Should you have any doubts, please, consult [our issue tracker](https://github.com/SAP/python-pyodata/issues). +## How to obtain support + +We provide unclaimable support via [GitHub issues](https://github.com/SAP/python-pyodata/issues) + ## Usage ### Get the service From 6a92c6f5845cd70d17535358e1670703f91e2b33 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 22 Jan 2019 23:00:31 +0100 Subject: [PATCH 08/19] doc: move examples to the solo file To make README easier to read. --- README.md | 188 +-------------------------------------------------- USAGE.md | 199 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 201 insertions(+), 186 deletions(-) create mode 100644 USAGE.md diff --git a/README.md b/README.md index 45250725..2e13163a 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ We provide unclaimable support via [GitHub issues](https://github.com/SAP/python ## Usage -### Get the service +The only thing you need to do is to import the _pyodata_ Python module. ```python import requests @@ -65,191 +65,7 @@ SERVICE_URL = 'http://services.odata.org/V2/Northwind/Northwind.svc/' client = pyodata.Client(SERVICE_URL, requests.Session()) ``` -### Get one entity identified by its key value - -```python -# Get employee identified by 1 and print employee first name -employee1 = client.entity_sets.Employees.get_entity(1).execute() -print employee1.FirstName -``` - -### Get one entity identified by its key value which is not scalar - -```python -# Get number of orderd units in the order identified by ProductID 42 and OrderID 10248. -order = client.entity_sets.Order_Details.get_entity(OrderID=10248, ProductID=42).execute() -print(order.Quantity) -``` - -### Get all entities of an entity set - -```python - -# Print unique identification (Id) and last name of all cemployees -employees = client.entity_sets.Employees.get_entities().select('EmployeeID,LasttName').execute() -for employee in employees: - print(employee.EmployeeID, employee.LastName) -``` - -### Get entities matching a filter - -```python -# Print unique identification (Id) of all employees with name John Smith -smith_employees_request = client.entity_sets.Employees.get_entities() -smith_employees_request = smith_employees_request.filter("FirstName eq 'John' and LastName eq 'Smith'") -for smith in smith_employees.execute(): - print(smith.EmployeeID) -``` - -### Get entities matching a filter in more Pythonic way - -```python -from pyodata.v2.service import GetEntitySetFilter - -# Print unique identification (Id) of all employees with name John Smith -smith_employees_request = client.entity_sets.Employees.get_entities() -smith_employees_request = smith_employees_request.filter(GetEntitySetFilter.and_( - smith_employees_request.FirstName == 'Jonh', - smith_employees_request.LastName == 'Smith')) -for smith in smith_employees_request.execute(): - print(smith.EmployeeID) -``` - -### Creating entity - -You need to use the method set which accepts key value parameters: - -```python -employee_data = { - 'FirstName': 'Mark', - 'LastName': 'Goody', - 'Address': { - 'HouseNumber': 42, - 'Street': 'Paradise', - 'City': 'Heaven' - } -} - -create_request = client.entity_sets.Employees.create_entity() -create_request.set(**employee_data) - -new_employee_entity = create_request.execute() -``` - -or you can do it explicitly: - -```python -create_request = client.entity_sets.Employees.create_entity() -create_request.set( - FirstName='Mark', - LastName='Goody', - Address={ - 'HouseNumber': 42, - 'Street': 'Paradise', - 'City': 'Heaven' - } -) - -new_employee_entity = request.execute() -``` - - -### Batch requests - -Example of batch request that contains 3 simple entity queries -``` -client = pyodata.Client(SERVICE_URL, requests.Session()) - -batch = client.create_batch() - -batch.add_request(client.entity_sets.Employees.get_entity(108)) -batch.add_request(client.entity_sets.Employees.get_entity(234)) -batch.add_request(client.entity_sets.Employees.get_entity(23)) - -response = batch.execute() - -print(response[0].EmployeeID, response[0].LastName) -print(response[1].EmployeeID, response[1].LastName) -print(response[1].EmployeeID, response[1].LastName) -``` - -Example of batch request that contains simple entity query as well -as changest consisting of two requests for entity modification -``` -client = pyodata.Client(SERVICE_URL, requests.Session()) - -batch = client.create_batch() - -batch.add_request(client.entity_sets.Employees.get_entity(108)) - -changeset = client.create_changeset() - -changeset.add_request(client.entity_sets.Employees.update_entity(45).set(LastName='Douglas')) - -batch.add_request(changeset) - -response = batch.execute() - -print(response[0].EmployeeID, response[0].LastName) -``` - -### Calling a function import - -```python -products = client.functions.GetProductsByRating.parameter('rating', 16).execute() -for prod in products: - print(prod) -``` - -## Error handling - -PyOData returns HttpError when the response code does not match the expected -code. - -In the case you know the implementation of back-end part and you want to show -accurate errors reported by your service, you can replace HttpError by your -sub-class HttpError by assigning your type into the class member VendorType of -the class HttpError. - -```python -from pyodata.exceptions import HttpError - - -class MyHttpError(HttpError): - - def __init__(self, message, response): - super(MyHttpError, self).__init__('Better message', response) - - -HttpError.VendorType = MyHttpError -``` - -The class ```pyodata.vendor.SAP.BusinessGatewayError``` is an example of such -an HTTP error handling. - -## Metadata tests - -By default, the client makes sure that references to properties, entities and -entity sets are pointing to existing elements. - -The most often problem that we had to deal with was an invalid ValueList annotion -pointing to a non-existing property. - - -### Property has this label - -```python - -assert client.schema.entity_type('Customer').proprty('CustomerID').label == 'Identifier' -``` - -### Property has a value helper - -```python - -assert client.schema.entity_type('Customer').proprty('City').value_helper is not None -``` - +Find more sophisticated examples in the [USAGE](USAGE.md) section. # Contributing diff --git a/USAGE.md b/USAGE.md new file mode 100644 index 00000000..fec4dbaa --- /dev/null +++ b/USAGE.md @@ -0,0 +1,199 @@ +# Usage examples + +### Get the service + +```python +import requests +import pyodata + +SERVICE_URL = 'http://services.odata.org/V2/Northwind/Northwind.svc/' + +# Create instance of OData client +client = pyodata.Client(SERVICE_URL, requests.Session()) +``` + +### Get one entity identified by its key value + +```python +# Get employee identified by 1 and print employee first name +employee1 = client.entity_sets.Employees.get_entity(1).execute() +print employee1.FirstName +``` + +### Get one entity identified by its key value which is not scalar + +```python +# Get number of orderd units in the order identified by ProductID 42 and OrderID 10248. +order = client.entity_sets.Order_Details.get_entity(OrderID=10248, ProductID=42).execute() +print(order.Quantity) +``` + +### Get all entities of an entity set + +```python + +# Print unique identification (Id) and last name of all cemployees +employees = client.entity_sets.Employees.get_entities().select('EmployeeID,LasttName').execute() +for employee in employees: + print(employee.EmployeeID, employee.LastName) +``` + +### Get entities matching a filter + +```python +# Print unique identification (Id) of all employees with name John Smith +smith_employees_request = client.entity_sets.Employees.get_entities() +smith_employees_request = smith_employees_request.filter("FirstName eq 'John' and LastName eq 'Smith'") +for smith in smith_employees.execute(): + print(smith.EmployeeID) +``` + +### Get entities matching a filter in more Pythonic way + +```python +from pyodata.v2.service import GetEntitySetFilter + +# Print unique identification (Id) of all employees with name John Smith +smith_employees_request = client.entity_sets.Employees.get_entities() +smith_employees_request = smith_employees_request.filter(GetEntitySetFilter.and_( + smith_employees_request.FirstName == 'Jonh', + smith_employees_request.LastName == 'Smith')) +for smith in smith_employees_request.execute(): + print(smith.EmployeeID) +``` + +### Creating entity + +You need to use the method set which accepts key value parameters: + +```python +employee_data = { + 'FirstName': 'Mark', + 'LastName': 'Goody', + 'Address': { + 'HouseNumber': 42, + 'Street': 'Paradise', + 'City': 'Heaven' + } +} + +create_request = client.entity_sets.Employees.create_entity() +create_request.set(**employee_data) + +new_employee_entity = create_request.execute() +``` + +or you can do it explicitly: + +```python +create_request = client.entity_sets.Employees.create_entity() +create_request.set( + FirstName='Mark', + LastName='Goody', + Address={ + 'HouseNumber': 42, + 'Street': 'Paradise', + 'City': 'Heaven' + } +) + +new_employee_entity = request.execute() +``` + + +### Batch requests + +Example of batch request that contains 3 simple entity queries +``` +client = pyodata.Client(SERVICE_URL, requests.Session()) + +batch = client.create_batch() + +batch.add_request(client.entity_sets.Employees.get_entity(108)) +batch.add_request(client.entity_sets.Employees.get_entity(234)) +batch.add_request(client.entity_sets.Employees.get_entity(23)) + +response = batch.execute() + +print(response[0].EmployeeID, response[0].LastName) +print(response[1].EmployeeID, response[1].LastName) +print(response[1].EmployeeID, response[1].LastName) +``` + +Example of batch request that contains simple entity query as well +as changest consisting of two requests for entity modification +``` +client = pyodata.Client(SERVICE_URL, requests.Session()) + +batch = client.create_batch() + +batch.add_request(client.entity_sets.Employees.get_entity(108)) + +changeset = client.create_changeset() + +changeset.add_request(client.entity_sets.Employees.update_entity(45).set(LastName='Douglas')) + +batch.add_request(changeset) + +response = batch.execute() + +print(response[0].EmployeeID, response[0].LastName) +``` + +### Calling a function import + +```python +products = client.functions.GetProductsByRating.parameter('rating', 16).execute() +for prod in products: + print(prod) +``` + +## Error handling + +PyOData returns HttpError when the response code does not match the expected +code. + +In the case you know the implementation of back-end part and you want to show +accurate errors reported by your service, you can replace HttpError by your +sub-class HttpError by assigning your type into the class member VendorType of +the class HttpError. + +```python +from pyodata.exceptions import HttpError + + +class MyHttpError(HttpError): + + def __init__(self, message, response): + super(MyHttpError, self).__init__('Better message', response) + + +HttpError.VendorType = MyHttpError +``` + +The class ```pyodata.vendor.SAP.BusinessGatewayError``` is an example of such +an HTTP error handling. + +## Metadata tests + +By default, the client makes sure that references to properties, entities and +entity sets are pointing to existing elements. + +The most often problem that we had to deal with was an invalid ValueList annotion +pointing to a non-existing property. + + +### Property has this label + +```python + +assert client.schema.entity_type('Customer').proprty('CustomerID').label == 'Identifier' +``` + +### Property has a value helper + +```python + +assert client.schema.entity_type('Customer').proprty('City').value_helper is not None +``` + From e3686c79232583e71a2e7a63468d0f7ac8c53bd0 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 22 Jan 2019 23:03:18 +0100 Subject: [PATCH 09/19] doc: move tips and tricks to the HACKING section To avoid confusion and distraction. --- HACKING.md | 19 +++++++++++++++++++ README.md | 15 --------------- 2 files changed, 19 insertions(+), 15 deletions(-) create mode 100644 HACKING.md diff --git a/HACKING.md b/HACKING.md new file mode 100644 index 00000000..14a4ad03 --- /dev/null +++ b/HACKING.md @@ -0,0 +1,19 @@ +# Hacking + +This document provides guides on how to develop and maintain the pyodata Python +module. + +## Tips & tricks + +If you want to avoid creating pull requests that fail on lint errors but you +always forgot to run `make check`, create the pre-commit file in the director +.git/hooks with the following content: + +```bash +#!/bin/sh + +make check +``` + +Do not forget to run `chmod +x .git/hooks/pre-commit` to make the hook script +executable. diff --git a/README.md b/README.md index 2e13163a..ba5ae7a0 100644 --- a/README.md +++ b/README.md @@ -103,18 +103,3 @@ Your username is `yourname` and you're submitting a basic bugfix or feature. new bugfix). * Hit 'submit'! And please be patient - the maintainers will get to you when they can. - -## Tips & tricks - -If you want to avoid creating pull requests that fail on lint errors but you -always forgot to run `make check`, create the pre-commit file in the director -.git/hooks with the following content: - -```bash -#!/bin/sh - -make check -``` - -Do not forget to run `chmod +x .git/hooks/pre-commit` to make the hook script -executable. From 293dd405de182ff4cc201f6508be81dd9e26acd7 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 22 Jan 2019 23:08:44 +0100 Subject: [PATCH 10/19] doc+lic: include LICENSE in readme and updated Year --- LICENSE | 2 +- README.md | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 185d6423..8b893a31 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2018 SAPĀ® + Copyright 2019 SAPĀ® Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index ba5ae7a0..3683f375 100644 --- a/README.md +++ b/README.md @@ -103,3 +103,13 @@ Your username is `yourname` and you're submitting a basic bugfix or feature. new bugfix). * Hit 'submit'! And please be patient - the maintainers will get to you when they can. + +# License + +Copyright (c) 2019 SAP SE or an SAP affiliate company. + +All rights reserved. This file is licensed under + + the Apache Software License, v. 2 + +except as noted otherwise in [the LICENSE file](LICENSE) From 683b36a6d1444f969186208bb8124243d0933623 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 22 Jan 2019 23:10:55 +0100 Subject: [PATCH 11/19] doc: add NOTICE --- NOTICE | 1 + 1 file changed, 1 insertion(+) create mode 100644 NOTICE diff --git a/NOTICE b/NOTICE new file mode 100644 index 00000000..2c848d0b --- /dev/null +++ b/NOTICE @@ -0,0 +1 @@ +Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. From 36554d0561ff9d41c8cd800b31e6048d5fec7cab Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 5 Feb 2019 07:44:07 +0100 Subject: [PATCH 12/19] doc: remove requirements installed by pip https://github.com/SAP/python-pyodata/pull/1#discussion_r253178240 --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 3683f375..3a3daa0b 100644 --- a/README.md +++ b/README.md @@ -9,10 +9,6 @@ details. ## Requirements - [Python >= 3.6](https://www.python.org/downloads/release/python-368/) -- [requests == 2.20.0](https://pypi.org/project/requests/2.20.0/) -- [enum34 >= 1.0.4](https://pypi.org/project/enum34/) -- [funcsigs >= 1.0.2](https://pypi.org/project/funcsigs/) -- [lxml >= 3.7.3](https://pypi.org/project/lxml/) ## Download and Installation From cb6b17af005f9ab9dd4cc40805e039ec140a035f Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 5 Feb 2019 07:44:59 +0100 Subject: [PATCH 13/19] doc: remove marketing lingo https://github.com/SAP/python-pyodata/pull/1#discussion_r253177289 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3a3daa0b..038f6204 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # python-pyodata -Enterprise-ready Python OData client which provides comfortable Python agnostic +Python OData client which provides comfortable Python agnostic way for communication with OData services. The goal of this Python module is to hide all OData protocol implementation From 612125826b7a265c62fdfbb42dd93270b46d8865 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 5 Feb 2019 07:47:10 +0100 Subject: [PATCH 14/19] doc: keep the installation section simple https://github.com/SAP/python-pyodata/pull/1#discussion_r253178666 --- README.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/README.md b/README.md index 038f6204..e64ffd3f 100644 --- a/README.md +++ b/README.md @@ -12,17 +12,6 @@ details. ## Download and Installation -You can obtain the latest version for this repository as [ZIP archive](https://github.com/SAP/python-pyodata/archive/master/pyodata.zip). - -You can also use [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) to clone and pull the repository. - -```bash -git clone https://github.com/SAP/python-pyodata.git -``` - -To make the pyodata Python module available in your projects, you need to -install the sub-directory __pyodata__ into [the Module Search Path](https://docs.python.org/3/tutorial/modules.html#the-module-search-path). - You can make use of [pip](https://packaging.python.org/tutorials/installing-packages/#installing-from-vcs) to install the pyodata module automatically: From 8fdc9787d1ab7f05d38659949071c176885b3d29 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 5 Feb 2019 07:48:17 +0100 Subject: [PATCH 15/19] doc: rephrase the sentence about no issues https://github.com/SAP/python-pyodata/pull/1#discussion_r253178979 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e64ffd3f..d90272cf 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ There have been no limitations discovered yet. ## Known Issues -This projects is issue-free. Should you have any doubts, please, consult [our issue tracker](https://github.com/SAP/python-pyodata/issues). +There are no known issues at this time. ## How to obtain support From 22f4973c0ae0b76e9cd15b741403e5891500a308 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 5 Feb 2019 07:50:28 +0100 Subject: [PATCH 16/19] doc: replace pseudo legal word unclaimable https://github.com/SAP/python-pyodata/pull/1#discussion_r253180398 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d90272cf..4294f33f 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ There are no known issues at this time. ## How to obtain support -We provide unclaimable support via [GitHub issues](https://github.com/SAP/python-pyodata/issues) +We accept bug reports, feature requests, questions and comments via [GitHub issues](https://github.com/SAP/python-pyodata/issues) ## Usage From 533aa0d868df128f8cbf84492ac7527f203502c2 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 5 Feb 2019 07:52:28 +0100 Subject: [PATCH 17/19] doc: update headings https://github.com/SAP/python-pyodata/pull/1#discussion_r253181713 https://github.com/SAP/python-pyodata/pull/1#discussion_r253181802 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4294f33f..9c37d5dc 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ client = pyodata.Client(SERVICE_URL, requests.Session()) Find more sophisticated examples in the [USAGE](USAGE.md) section. -# Contributing +## Contributing Before contributing, please, make yourself familiar with git. You can [try git online](https://try.github.io/). Things would be easier for all of us if you do @@ -68,7 +68,7 @@ negative decisions - i.e. why you decided to not do particular things. Please bare in mind that other developers might not understand what the original problem was. -## Full example +### Full example Here's an example workflow for a project `PyOData` hosted on Github Your username is `yourname` and you're submitting a basic bugfix or feature. @@ -89,7 +89,7 @@ Your username is `yourname` and you're submitting a basic bugfix or feature. * Hit 'submit'! And please be patient - the maintainers will get to you when they can. -# License +## License Copyright (c) 2019 SAP SE or an SAP affiliate company. From 3db767f55a8a69cb6eb68a7708ae1057a592c7ae Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Tue, 5 Feb 2019 07:55:29 +0100 Subject: [PATCH 18/19] doc: refactor license section https://github.com/SAP/python-pyodata/pull/1#discussion_r253181969 --- README.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 9c37d5dc..c0963638 100644 --- a/README.md +++ b/README.md @@ -91,10 +91,6 @@ Your username is `yourname` and you're submitting a basic bugfix or feature. ## License -Copyright (c) 2019 SAP SE or an SAP affiliate company. - -All rights reserved. This file is licensed under - - the Apache Software License, v. 2 - -except as noted otherwise in [the LICENSE file](LICENSE) +Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. +This file is licensed under the Apache Software License, v. 2 except as noted +otherwise in [the LICENSE file](LICENSE) From 4bb6b0c417fd17227120c54a4f7cd7e8033af755 Mon Sep 17 00:00:00 2001 From: Jonathan Baker Date: Mon, 11 Feb 2019 13:56:20 -0500 Subject: [PATCH 19/19] Fixed title, minor change --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c0963638..95b9eeb2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# python-pyodata +# Python OData Client - pyodata Python OData client which provides comfortable Python agnostic way for communication with OData services.