From af38afbd631813dcdf5882c96bf475336215800c Mon Sep 17 00:00:00 2001 From: Ali Abbas Rizvi Date: Mon, 24 Sep 2018 15:54:55 -0700 Subject: [PATCH] Changing MD --> RST (#143) --- CHANGELOG.md | 129 ------------- CHANGELOG.rst | 230 ++++++++++++++++++++++++ CONTRIBUTING.md | 50 ------ CONTRIBUTING.rst | 80 +++++++++ MANIFEST.in | 4 +- README.md | 89 --------- README.rst | 129 +++++++++++++ setup.py | 5 +- tests/testapp/{README.md => README.rst} | 4 +- 9 files changed, 446 insertions(+), 274 deletions(-) delete mode 100644 CHANGELOG.md create mode 100644 CHANGELOG.rst delete mode 100644 CONTRIBUTING.md create mode 100644 CONTRIBUTING.rst delete mode 100644 README.md create mode 100644 README.rst rename tests/testapp/{README.md => README.rst} (73%) diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 2d37192e..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,129 +0,0 @@ -## 2.1.1 -August 21st, 2018 - -- Fix: record conversions for all experiments using an event when using track([#136](https://github.com/optimizely/python-sdk/pull/136)). - -## 2.1.0 -July 2nd, 2018 - -- Introduced support for bot filtering ([#121](https://github.com/optimizely/python-sdk/pull/121)). -- Overhauled logging to use standard Python logging ([#123](https://github.com/optimizely/python-sdk/pull/123)). - -## 2.0.1 -June 19th, 2018 - -- Fix: send impression event for Feature Test when Feature is disabled ([#128](https://github.com/optimizely/python-sdk/pull/128)). - -## 2.0.0 -April 12th, 2018 - -This major release introduces APIs for Feature Management. It also introduces some breaking changes listed below. - -### New Features -- Introduced the `is_feature_enabled` API to determine whether to show a feature to a user or not. -``` -is_enabled = optimizel_client.is_feature_enabled('my_feature_key', 'my_user', user_attributes) -``` - -- All enabled features for the user can be retrieved by calling: -``` -enabled_features = optimizely_client.get_enabled_features('my_user', user_attributes) -``` - -- Introduced Feature Variables to configure or parameterize a feature. There are four variable types: `String`, `Integer`, `Double`, `Boolean`. -``` -string_variable = optimizely_client.get_feature_variable_string('my_feature_key', 'string_variable_key', 'my_user') -integer_variable = optimizely_client.get_feature_variable_integer('my_feature_key', 'integer_variable_key', 'my_user') -double_variable = optimizely_client.get_feature_variable_double('my_feature_key', 'double_variable_key', 'my_user') -boolean_variable = optimizely_client.get_feature_variable_boolean('my_feature_key', 'boolean_variable_key', 'my_user') -``` - -### Breaking changes -- The `track` API with revenue value as a stand-alone parameter has been removed. The revenue value should be passed in as an entry in the event tags dict. The key for the revenue tag is `revenue` and the passed in value will be treated by Optimizely as the value for computing results. -``` -event_tags = { - 'revenue': 1200 -} - -optimizely_client.track('event_key', 'my_user', user_attributes, event_tags) -``` - -## 2.0.0b1 -March 29th, 2018 - -This beta release introduces APIs for Feature Management. It also introduces some breaking changes listed below. - -### New Features -- Introduced the `is_feature_enabled` API to determine whether to show a feature to a user or not. -``` -is_enabled = optimizel_client.is_feature_enabled('my_feature_key', 'my_user', user_attributes) -``` - -- All enabled features for the user can be retrieved by calling: -``` -enabled_features = optimizely_client.get_enabled_features('my_user', user_attributes) -``` - -- Introduced Feature Variables to configure or parameterize a feature. There are four variable types: `String`, `Integer`, `Double`, `Boolean`. -``` -string_variable = optimizely_client.get_feature_variable_string('my_feature_key', 'string_variable_key', 'my_user') -integer_variable = optimizely_client.get_feature_variable_integer('my_feature_key', 'integer_variable_key', 'my_user') -double_variable = optimizely_client.get_feature_variable_double('my_feature_key', 'double_variable_key', 'my_user') -boolean_variable = optimizely_client.get_feature_variable_boolean('my_feature_key', 'boolean_variable_key', 'my_user') -``` - -### Breaking changes -- The `track` API with revenue value as a stand-alone parameter has been removed. The revenue value should be passed in as an entry in the event tags dict. The key for the revenue tag is `revenue` and the passed in value will be treated by Optimizely as the value for computing results. -``` -event_tags = { - 'revenue': 1200 -} - -optimizely_client.track('event_key', 'my_user', user_attributes, event_tags) -``` - -## 1.4.0 -- Added support for IP anonymization. -- Added support for notification listeners. -- Added support for bucketing ID. -- Updated mmh3 to handle installation failures on Windows 10. - -## 1.3.0 -- Introduced support for forced bucketing. -- Introduced support for numeric metrics. -- Updated event builder to support new endpoint. - -## 1.2.1 -- Removed older feature flag parsing. - -## 1.2.0 -- Added user profile service. - -## 1.1.1 -- Updated datafile parsing to be able to handle additional fields. -- Deprecated Classic project support. - -## 1.1.0 -- Included datafile revision information in log events. -- Added event tags to track API to allow users to pass in event metadata. -- Deprecated the `event_value` parameter from the track method. Should use `event_tags` to pass in event value instead. -- Updated event logging endpoint to logx.optimizely.com. - -## 1.0.0 -- Introduced support for Full Stack projects in Optimizely X. No breaking changes from previous version. -- Introduced more graceful exception handling in instantiation and core methods. -- Updated whitelisting to precede audience matching. - -## 0.1.3 -- Added support for v2 endpoint and datafile. -- Updated dispatch_event to consume an Event object instead of url and params. The Event object comprises of four properties: url (string representing URL to dispatch event to), params (dict representing the params to be set for the event), http_verb (one of 'GET' or 'POST') and headers (header values to be sent along). -- Fixed issue with tracking events for experiments in groups. - -## 0.1.2 -- Updated requirements file. - -## 0.1.1 -- Introduced option to skip JSON schema validation. - -## 0.1.0 -- Beta release of the Python SDK for server-side testing. \ No newline at end of file diff --git a/CHANGELOG.rst b/CHANGELOG.rst new file mode 100644 index 00000000..0a30f185 --- /dev/null +++ b/CHANGELOG.rst @@ -0,0 +1,230 @@ +2.1.1 +----- + +August 21st, 2018 + +- Fix: record conversions for all experiments using an event when using + track(\ `#136`_). + +.. _section-1: + +2.1.0 +----- + +July 2nd, 2018 + +- Introduced support for bot filtering (`#121`_). +- Overhauled logging to use standard Python logging (`#123`_). + +.. _section-2: + +2.0.1 +----- + +June 19th, 2018 + +- Fix: send impression event for Feature Test when Feature is disabled + (`#128`_). + +2.0.0 +----- + +April 12th, 2018 + +This major release introduces APIs for Feature Management. It also +introduces some breaking changes listed below. + +New Features +~~~~~~~~~~~~ + +- Introduced the ``is_feature_enabled`` API to determine whether to + show a feature to a user or not. + +:: + + is_enabled = optimizel_client.is_feature_enabled('my_feature_key', 'my_user', user_attributes) + +- All enabled features for the user can be retrieved by calling: + +:: + + enabled_features = optimizely_client.get_enabled_features('my_user', user_attributes) + +- Introduced Feature Variables to configure or parameterize a feature. + There are four variable types: ``String``, ``Integer``, ``Double``, + ``Boolean``. + +:: + + string_variable = optimizely_client.get_feature_variable_string('my_feature_key', 'string_variable_key', 'my_user') + integer_variable = optimizely_client.get_feature_variable_integer('my_feature_key', 'integer_variable_key', 'my_user') + double_variable = optimizely_client.get_feature_variable_double('my_feature_key', 'double_variable_key', 'my_user') + boolean_variable = optimizely_client.get_feature_variable_boolean('my_feature_key', 'boolean_variable_key', 'my_user') + +Breaking changes +~~~~~~~~~~~~~~~~ + +- The ``track`` API with revenue value as a stand-alone parameter has + been removed. The revenue value should be passed in as an entry in + the event tags dict. The key for the revenue tag is ``revenue`` and + the passed in value will be treated by Optimizely as the value for + computing results. + +:: + + event_tags = { + 'revenue': 1200 + } + + optimizely_client.track('event_key', 'my_user', user_attributes, event_tags) + +2.0.0b1 +------- + +March 29th, 2018 + +This beta release introduces APIs for Feature Management. It also +introduces some breaking changes listed below. + +New Features +~~~~~~~~~~~~ + +- Introduced the ``is_feature_enabled`` API to determine whether to + show a feature to a user or not. + +:: + + is_enabled = optimizel_client.is_feature_enabled('my_feature_key', 'my_user', user_attributes) + +- All enabled features for the user can be retrieved by calling: + +:: + + enabled_features = optimizely_client.get_enabled_features('my_user', user_attributes) + +- Introduced Feature Variables to configure or parameterize a feature. + There are four variable types: ``String``, ``Integer``, ``Double``, + ``Boolean``. + +:: + + string_variable = optimizely_client.get_feature_variable_string('my_feature_key', 'string_variable_key', 'my_user') + integer_variable = optimizely_client.get_feature_variable_integer('my_feature_key', 'integer_variable_key', 'my_user') + double_variable = optimizely_client.get_feature_variable_double('my_feature_key', 'double_variable_key', 'my_user') + boolean_variable = optimizely_client.get_feature_variable_boolean('my_feature_key', 'boolean_variable_key', 'my_user') + +Breaking changes +~~~~~~~~~~~~~~~~ + +- The ``track`` API with revenue value as a stand-alone parameter has + been removed. The revenue value should be passed in as an entry in + the event tags dict. The key for the revenue tag is ``revenue`` and + the passed in value will be treated by Optimizely as the value for + computing results. + +:: + + event_tags = { + 'revenue': 1200 + } + + optimizely_client.track('event_key', 'my_user', user_attributes, event_tags) + +1.4.0 +----- + +- Added support for IP anonymization. +- Added support for notification listeners. +- Added support for bucketing ID. +- Updated mmh3 to handle installation failures on Windows 10. + +.. _section-3: + +1.3.0 +----- + +- Introduced support for forced bucketing. +- Introduced support for numeric metrics. +- Updated event builder to support new endpoint. + +.. _section-4: + +1.2.1 +----- + +- Removed older feature flag parsing. + +.. _section-5: + +1.2.0 +----- + +- Added user profile service. + +.. _section-6: + +1.1.1 +----- + +- Updated datafile parsing to be able to handle additional fields. +- Deprecated Classic project support. + +.. _section-7: + +1.1.0 +----- + +- Included datafile revision information in log events. +- Added event tags to track API to allow users to pass in event + metadata. +- Deprecated the ``event_value`` parameter from the track method. + Should use ``event_tags`` to pass in event value instead. +- Updated event logging endpoint to logx.optimizely.com. + +.. _section-8: + +1.0.0 +----- + +- Introduced support for Full Stack projects in Optimizely X. No + breaking changes from previous version. +- Introduced more graceful exception handling in instantiation and core + methods. +- Updated whitelisting to precede audience matching. + +.. _section-9: + +0.1.3 +----- + +- Added support for v2 endpoint and datafile. +- Updated dispatch_event to consume an Event object instead of url and + params. The Event object comprises of four properties: url (string + representing URL to dispatch event to), params (dict representing the + params to be set for the event), http_verb (one of ‘GET’ or ‘POST’) + and headers (header values to be sent along). +- Fixed issue with tracking events for experiments in groups. + +0.1.2 +----- + +- Updated requirements file. + +.. _section-10: + +0.1.1 +----- + +- Introduced option to skip JSON schema validation. + +.. _section-11: + +0.1.0 +----- + +- Beta release of the Python SDK for server-side testing. + +.. _#136: https://github.com/optimizely/python-sdk/pull/136 +.. _#121: https://github.com/optimizely/python-sdk/pull/121 +.. _#123: https://github.com/optimizely/python-sdk/pull/123 +.. _#128: https://github.com/optimizely/python-sdk/pull/128 \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index a09a4dea..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,50 +0,0 @@ -# Contributing to the Optimizely Python SDK - -We welcome contributions and feedback! All contributors must sign our [Contributor License Agreement (CLA)](https://docs.google.com/a/optimizely.com/forms/d/e/1FAIpQLSf9cbouWptIpMgukAKZZOIAhafvjFCV8hS00XJLWQnWDFtwtA/viewform) to be eligible to contribute. Please read the [README](README.md) to set up your development environment, then read the guidelines below for information on submitting your code. - -## Development process - -1. Create a branch off of `master`: `git checkout -b YOUR_NAME/branch_name`. -2. Commit your changes. Make sure to add tests! -3. Lint your changes before submitting: `pep8 YOUR_CHANGED_FILES.py`. -4. `git push` your changes to GitHub. -5. Make sure that all unit tests are passing and that there are no merge conflicts between your branch and `master`. -6. Open a pull request from `YOUR_NAME/branch_name` to `master`. -7. A repository maintainer will review your pull request and, if all goes well, squash and merge it! - -## Pull request acceptance criteria - -* **All code must have test coverage.** We use unittest. Changes in functionality should have accompanying unit tests. Bug fixes should have accompanying regression tests. - * Tests are located in `/tests` with one file per class. -* Please don't change the `__version__`. We'll take care of bumping the version when we next release. -* Lint your code with PEP-8 before submitting. - -## Style - -We enforce PEP-8 rules with a few minor [deviations](https://github.com/optimizely/python-sdk/blob/master/tox.ini). - -## License - -All contributions are under the CLA mentioned above. For this project, Optimizely uses the Apache 2.0 license, and so asks that by contributing your code, you agree to license your contribution under the terms of the [Apache License v2.0](http://www.apache.org/licenses/LICENSE-2.0). Your contributions should also include the following header: - -``` -# Copyright YEAR, Optimizely, Inc. and contributors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -``` - -The YEAR above should be the year of the contribution. If work on the file has been done over multiple years, list each year in the section above. Example: Optimizely writes the file and releases it in 2014. No changes are made in 2015. Change made in 2016. YEAR should be “2014, 2016”. - -## Contact - -If you have questions, please contact developers@optimizely.com. diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst new file mode 100644 index 00000000..75381951 --- /dev/null +++ b/CONTRIBUTING.rst @@ -0,0 +1,80 @@ +Contributing to the Optimizely Python SDK +========================================= + +We welcome contributions and feedback! All contributors must sign our +`Contributor License Agreement (CLA)`_ to be eligible to contribute. +Please read the `README`_ to set up your development environment, then +read the guidelines below for information on submitting your code. + +Development process +------------------- + +1. Create a branch off of ``master``: + ``git checkout -b YOUR_NAME/branch_name``. +2. Commit your changes. Make sure to add tests! +3. Lint your changes before submitting: ``pep8 YOUR_CHANGED_FILES.py``. +4. ``git push`` your changes to GitHub. +5. Make sure that all unit tests are passing and that there are no merge + conflicts between your branch and ``master``. +6. Open a pull request from ``YOUR_NAME/branch_name`` to ``master``. +7. A repository maintainer will review your pull request and, if all + goes well, squash and merge it! + +Pull request acceptance criteria +-------------------------------- + +- **All code must have test coverage.** We use unittest. Changes in + functionality should have accompanying unit tests. Bug fixes should + have accompanying regression tests. + + - Tests are located in ``/tests`` with one file per class. + +- Please don’t change the ``__version__``. We’ll take care of bumping + the version when we next release. +- Lint your code with PEP-8 before submitting. + +Style +----- + +We enforce PEP-8 rules with a few minor `deviations`_. + +License +------- + +All contributions are under the CLA mentioned above. For this project, +Optimizely uses the Apache 2.0 license, and so asks that by contributing +your code, you agree to license your contribution under the terms of the +`Apache License v2.0`_. Your contributions should also include the +following header: + +:: + + # Copyright YEAR, Optimizely, Inc. and contributors + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + +The YEAR above should be the year of the contribution. If work on the +file has been done over multiple years, list each year in the section +above. Example: Optimizely writes the file and releases it in 2014. No +changes are made in 2015. Change made in 2016. YEAR should be “2014, +2016”. + +Contact +------- + +If you have questions, please contact developers@optimizely.com. + +.. _Contributor License Agreement (CLA): https://docs.google.com/a/optimizely.com/forms/d/e/1FAIpQLSf9cbouWptIpMgukAKZZOIAhafvjFCV8hS00XJLWQnWDFtwtA/viewform +.. _README: README.rst +.. _deviations: https://github.com/optimizely/python-sdk/blob/master/tox.ini +.. _Apache License v2.0: http://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/MANIFEST.in b/MANIFEST.in index 109cdcd0..74f53fcf 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,5 @@ include LICENSE -include CHANGELOG.md -include README.md +include CHANGELOG.rst +include README.rst include requirements/* recursive-exclude tests * diff --git a/README.md b/README.md deleted file mode 100644 index 4c0948fb..00000000 --- a/README.md +++ /dev/null @@ -1,89 +0,0 @@ -# Optimizely Python SDK -[![PyPI version](https://badge.fury.io/py/optimizely-sdk.svg)](https://pypi.org/project/optimizely-sdk) -[![Build Status](https://travis-ci.org/optimizely/python-sdk.svg?branch=master)](https://travis-ci.org/optimizely/python-sdk) -[![Coverage Status](https://coveralls.io/repos/github/optimizely/python-sdk/badge.svg)](https://coveralls.io/github/optimizely/python-sdk) -[![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0) - -This repository houses the Python SDK for Optimizely Full Stack. - -## Getting Started - -### Installing the SDK - -The SDK is available through [PyPi](https://pypi.python.org/pypi?name=optimizely-sdk&:action=display). To install: - -``` -pip install optimizely-sdk -``` - -### Feature Management Access -To access the Feature Management configuration in the Optimizely dashboard, please contact your Optimizely account executive. - -### Using the SDK -See the Optimizely Full Stack [developer documentation](http://developers.optimizely.com/server/reference/index.html) to learn how to set up your first Python project and use the SDK. - -## Development - -### Building the SDK - -Build and install the SDK with pip, using the following command: - -``` -pip install -e . -``` - -### Unit tests - -##### Running all tests - -To get test dependencies installed, use a modified version of the install command: -``` -pip install -e .[test] -``` -You can run all unit tests with: - -``` -nosetests -``` - -##### Running all tests in a file -To run all tests under a particular test file you can use the following command: - -``` -nosetests tests. -``` - -For example, to run all tests under `test_event`, the command would be: - -``` -nosetests tests.test_event -``` - -##### Running all tests under a class -To run all tests under a particular class of tests you can use the following command: - -``` -nosetests tests.:ClassName -``` - -For example, to run all tests under `test_event.EventTest`, the command would be: -``` -nosetests tests.test_event:EventTest -``` - -##### Running a single test -To run a single test you can use the following command: - -``` -nosetests tests.:ClassName.test_name -``` - -For example, to run `test_event.EventTest.test_dispatch`, the command would be: - -``` -nosetests tests.test_event:EventTest.test_dispatch -``` - -### Contributing - -Please see [CONTRIBUTING](CONTRIBUTING.md). diff --git a/README.rst b/README.rst new file mode 100644 index 00000000..38a40b37 --- /dev/null +++ b/README.rst @@ -0,0 +1,129 @@ +Optimizely Python SDK +===================== + +|PyPI version| |Build Status| |Coverage Status| |Apache 2.0| + +This repository houses the Python SDK for Optimizely Full Stack. + +Getting Started +--------------- + +Installing the SDK +~~~~~~~~~~~~~~~~~~ + +The SDK is available through `PyPi`_. To install: + +:: + + pip install optimizely-sdk + +Feature Management Access +~~~~~~~~~~~~~~~~~~~~~~~~~ + +To access the Feature Management configuration in the Optimizely +dashboard, please contact your Optimizely account executive. + +Using the SDK +~~~~~~~~~~~~~ + +See the Optimizely Full Stack `developer documentation`_ to learn how to +set up your first Python project and use the SDK. + +Development +----------- + +Building the SDK +~~~~~~~~~~~~~~~~ + +Build and install the SDK with pip, using the following command: + +:: + + pip install -e . + +Unit tests +~~~~~~~~~~ + +Running all tests +''''''''''''''''' + +To get test dependencies installed, use a modified version of the +install command: + +:: + + pip install -e .[test] + +You can run all unit tests with: + +:: + + nosetests + +Running all tests in a file +''''''''''''''''''''''''''' + +To run all tests under a particular test file you can use the following +command: + +:: + + nosetests tests. + +For example, to run all tests under ``test_event``, the command would +be: + +:: + + nosetests tests.test_event + +Running all tests under a class +''''''''''''''''''''''''''''''' + +To run all tests under a particular class of tests you can use the +following command: + +:: + + nosetests tests.:ClassName + +For example, to run all tests under ``test_event.EventTest``, the +command would be: + +:: + + nosetests tests.test_event:EventTest + +Running a single test +''''''''''''''''''''' + +To run a single test you can use the following command: + +:: + + nosetests tests.:ClassName.test_name + +For example, to run ``test_event.EventTest.test_dispatch``, the command +would be: + +:: + + nosetests tests.test_event:EventTest.test_dispatch + +Contributing +~~~~~~~~~~~~ + +Please see `CONTRIBUTING`_. + +.. _PyPi: https://pypi.python.org/pypi?name=optimizely-sdk&:action=display +.. _developer documentation: http://developers.optimizely.com/server/reference/index.html +.. _CONTRIBUTING: CONTRIBUTING.rst + +.. |PyPI version| image:: https://badge.fury.io/py/optimizely-sdk.svg + :target: https://pypi.org/project/optimizely-sdk +.. |Build Status| image:: https://travis-ci.org/optimizely/python-sdk.svg?branch=master + :target: https://travis-ci.org/optimizely/python-sdk +.. |Coverage Status| image:: https://coveralls.io/repos/github/optimizely/python-sdk/badge.svg + :target: https://coveralls.io/github/optimizely/python-sdk +.. |Apache 2.0| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg + :target: http://www.apache.org/licenses/LICENSE-2.0 diff --git a/setup.py b/setup.py index b5d4f18f..6f487ec0 100644 --- a/setup.py +++ b/setup.py @@ -17,10 +17,10 @@ TEST_REQUIREMENTS = _file.read().splitlines() TEST_REQUIREMENTS = list(set(REQUIREMENTS + TEST_REQUIREMENTS)) -with open(os.path.join(here, 'README.md')) as _file: +with open(os.path.join(here, 'README.rst')) as _file: README = _file.read() -with open(os.path.join(here, 'CHANGELOG.md')) as _file: +with open(os.path.join(here, 'CHANGELOG.rst')) as _file: CHANGELOG = _file.read() about_text = 'Optimizely X Full Stack is A/B testing and feature management for product development teams. ' \ @@ -33,7 +33,6 @@ version=__version__, description='Python SDK for Optimizely X Full Stack.', long_description=about_text + '\n\n# Readme: \n' + README + '\n\n# Change Log: \n' + CHANGELOG, - long_description_content_type='text/markdown', author='Optimizely', author_email='developers@optimizely.com', url='https://github.com/optimizely/python-sdk', diff --git a/tests/testapp/README.md b/tests/testapp/README.rst similarity index 73% rename from tests/testapp/README.md rename to tests/testapp/README.rst index 84a42433..257ee632 100644 --- a/tests/testapp/README.md +++ b/tests/testapp/README.rst @@ -1,2 +1,4 @@ -# python-testapp +python-testapp +============== + Test application used in end-to-end testing of Optimizely X Full Stack Python projects.