From 041b68c4abd82ad861dc335cae3c2f657d5aee6b Mon Sep 17 00:00:00 2001 From: Michael Dorner Date: Thu, 2 Feb 2023 12:03:44 +0100 Subject: [PATCH 1/5] Rename to arestclient --- .gitignore | 2 +- README.md | 2 +- {agithub => arestclient}/AppVeyor.py | 4 ++-- {agithub => arestclient}/DigitalOcean.py | 2 +- {agithub => arestclient}/Facebook.py | 2 +- {agithub => arestclient}/GitHub.py | 4 ++-- {agithub => arestclient}/Maven.py | 2 +- {agithub => arestclient}/OpenWeatherMap.py | 2 +- {agithub => arestclient}/SalesForce.py | 2 +- {agithub => arestclient}/__init__.py | 2 +- agithub/agithub_test.py => arestclient/arestclient_test.py | 4 ++-- {agithub => arestclient}/base.py | 2 +- {agithub => arestclient}/test.py | 2 +- setup.py | 4 ++-- tox.ini | 2 +- 15 files changed, 19 insertions(+), 19 deletions(-) rename {agithub => arestclient}/AppVeyor.py (93%) rename {agithub => arestclient}/DigitalOcean.py (91%) rename {agithub => arestclient}/Facebook.py (92%) rename {agithub => arestclient}/GitHub.py (98%) rename {agithub => arestclient}/Maven.py (87%) rename {agithub => arestclient}/OpenWeatherMap.py (86%) rename {agithub => arestclient}/SalesForce.py (95%) rename {agithub => arestclient}/__init__.py (71%) rename agithub/agithub_test.py => arestclient/arestclient_test.py (97%) rename {agithub => arestclient}/base.py (99%) rename {agithub => arestclient}/test.py (99%) diff --git a/.gitignore b/.gitignore index 193bcd2..3ed3a23 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ tags *.py[co] MANIFEST dist/* -agithub.egg-info/ +arestclient.egg-info/ build/ dist/ .tox diff --git a/README.md b/README.md index cecbaac..a3513f0 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ > It doesn't know, and you don't care! -`agithub` is a REST API client with transparent syntax which facilitates +`arestclient` is a REST API client with transparent syntax which facilitates rapid prototyping — on *any* REST API! Originally tailored to the GitHub REST API, AGitHub has grown up to diff --git a/agithub/AppVeyor.py b/arestclient/AppVeyor.py similarity index 93% rename from agithub/AppVeyor.py rename to arestclient/AppVeyor.py index e36be2c..e8f0756 100644 --- a/agithub/AppVeyor.py +++ b/arestclient/AppVeyor.py @@ -4,13 +4,13 @@ # AppVeyor REST API: https://www.appveyor.com/docs/api/ # Version 1.0 (2017-02-13) by topic2k@atlogger.de -from agithub.base import API, ConnectionProperties, Client +from arestclient.base import API, ConnectionProperties, Client class AppVeyor(API): """ The agnostic AppVeyor API. It doesn't know, and you don't care. - >>> from agithub.AppVeyor import AppVeyor + >>> from arestclient.AppVeyor import AppVeyor >>> ci = AppVeyor('') >>> status, data = ci.api.projects.get() >>> data diff --git a/agithub/DigitalOcean.py b/arestclient/DigitalOcean.py similarity index 91% rename from agithub/DigitalOcean.py rename to arestclient/DigitalOcean.py index e769f94..111bc24 100644 --- a/agithub/DigitalOcean.py +++ b/arestclient/DigitalOcean.py @@ -1,6 +1,6 @@ # Copyright 2012-2016 Jonathan Paugh and contributors # See COPYING for license details -from agithub.base import API, ConnectionProperties, Client +from arestclient.base import API, ConnectionProperties, Client class DigitalOcean(API): diff --git a/agithub/Facebook.py b/arestclient/Facebook.py similarity index 92% rename from agithub/Facebook.py rename to arestclient/Facebook.py index de4faa0..f23bab5 100644 --- a/agithub/Facebook.py +++ b/arestclient/Facebook.py @@ -1,6 +1,6 @@ # Copyright 2012-2016 Jonathan Paugh and contributors # See COPYING for license details -from agithub.base import API, ConnectionProperties, Client +from arestclient.base import API, ConnectionProperties, Client class Facebook(API): diff --git a/agithub/GitHub.py b/arestclient/GitHub.py similarity index 98% rename from agithub/GitHub.py rename to arestclient/GitHub.py index 485ab9b..b443db3 100644 --- a/agithub/GitHub.py +++ b/arestclient/GitHub.py @@ -5,7 +5,7 @@ import re import logging -from agithub.base import ( +from arestclient.base import ( API, ConnectionProperties, Client, RequestBody, ResponseBody) logger = logging.getLogger(__name__) @@ -14,7 +14,7 @@ class GitHub(API): """ The agnostic GitHub API. It doesn't know, and you don't care. - >>> from agithub.GitHub import GitHub + >>> from arestclient.GitHub import GitHub >>> g = GitHub('user', 'pass') >>> status, data = g.issues.get(filter='subscribed') >>> data diff --git a/agithub/Maven.py b/arestclient/Maven.py similarity index 87% rename from agithub/Maven.py rename to arestclient/Maven.py index f7b6983..238e8e2 100644 --- a/agithub/Maven.py +++ b/arestclient/Maven.py @@ -1,6 +1,6 @@ # Copyright 2012-2016 Jonathan Paugh and contributors # See COPYING for license details -from agithub.base import API, Client, ConnectionProperties +from arestclient.base import API, Client, ConnectionProperties class Maven(API): diff --git a/agithub/OpenWeatherMap.py b/arestclient/OpenWeatherMap.py similarity index 86% rename from agithub/OpenWeatherMap.py rename to arestclient/OpenWeatherMap.py index 6e1e392..d0c0a6a 100644 --- a/agithub/OpenWeatherMap.py +++ b/arestclient/OpenWeatherMap.py @@ -1,6 +1,6 @@ # Copyright 2012-2016 Jonathan Paugh and contributors # See COPYING for license details -from agithub.base import API, ConnectionProperties, Client +from arestclient.base import API, ConnectionProperties, Client class OpenWeatherMap(API): diff --git a/agithub/SalesForce.py b/arestclient/SalesForce.py similarity index 95% rename from agithub/SalesForce.py rename to arestclient/SalesForce.py index 2dfcb0a..1960038 100644 --- a/agithub/SalesForce.py +++ b/arestclient/SalesForce.py @@ -1,6 +1,6 @@ # Copyright 2012-2016 Jonathan Paugh and contributors # See COPYING for license details -from agithub.base import API, ConnectionProperties, Client +from arestclient.base import API, ConnectionProperties, Client class SalesForce(API): diff --git a/agithub/__init__.py b/arestclient/__init__.py similarity index 71% rename from agithub/__init__.py rename to arestclient/__init__.py index e47e18b..451e83b 100644 --- a/agithub/__init__.py +++ b/arestclient/__init__.py @@ -1,5 +1,5 @@ # Copyright 2012-2016 Jonathan Paugh and contributors # See COPYING for license details -from agithub.base import VERSION, STR_VERSION +from arestclient.base import VERSION, STR_VERSION __all__ = ["VERSION", "STR_VERSION"] diff --git a/agithub/agithub_test.py b/arestclient/arestclient_test.py similarity index 97% rename from agithub/agithub_test.py rename to arestclient/arestclient_test.py index ad79144..20b1e10 100755 --- a/agithub/agithub_test.py +++ b/arestclient/arestclient_test.py @@ -1,8 +1,8 @@ #!/usr/bin/env python # Copyright 2012-2016 Jonathan Paugh and contributors # See COPYING for license details -from agithub.GitHub import GitHub -from agithub.base import IncompleteRequest +from arestclient.GitHub import GitHub +from arestclient.base import IncompleteRequest import unittest diff --git a/agithub/base.py b/arestclient/base.py similarity index 99% rename from agithub/base.py rename to arestclient/base.py index 88b8a31..318f83c 100644 --- a/agithub/base.py +++ b/arestclient/base.py @@ -21,7 +21,7 @@ class ConnectionError(OSError): # can be explicitly overridden by the client code. (Used in Client # objects.) _default_headers = { - 'user-agent': 'agithub/' + STR_VERSION, + 'user-agent': 'arestclient/' + STR_VERSION, 'content-type': 'application/json' } diff --git a/agithub/test.py b/arestclient/test.py similarity index 99% rename from agithub/test.py rename to arestclient/test.py index 0233025..b5c28d3 100755 --- a/agithub/test.py +++ b/arestclient/test.py @@ -2,7 +2,7 @@ # Copyright 2012-2016 Jonathan Paugh and contributors # See COPYING for license details from __future__ import print_function -from agithub.GitHub import GitHub +from arestclient.GitHub import GitHub ## # Test harness diff --git a/setup.py b/setup.py index c9b753f..91028ea 100755 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ version = '2.2.2' -setup(name='agithub', +setup(name='arestclient', version=version, description="A lightweight, transparent syntax for REST clients", long_description=long_description, @@ -24,7 +24,7 @@ keywords=['api', 'REST', 'GitHub', 'Facebook', 'SalesForce'], author='Jonathan Paugh', author_email='jpaugh@gmx.us', - url='https://github.com/mozilla/agithub', + url='https://github.com/michaeldorner/arestclient', license='MIT', packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), include_package_data=True, diff --git a/tox.ini b/tox.ini index 22bb82a..65e2673 100644 --- a/tox.ini +++ b/tox.ini @@ -9,7 +9,7 @@ python = [testenv:flake8] basepython = python deps = flake8 -commands = flake8 agithub setup.py +commands = flake8 arestclient setup.py [testenv] setenv = From 44e03cbbbd897b0f4b19013460391e844916429d Mon Sep 17 00:00:00 2001 From: Michael Dorner Date: Thu, 2 Feb 2023 12:30:05 +0100 Subject: [PATCH 2/5] Remove old content --- CHANGELOG.md | 107 --------------------------------------------- CODE_OF_CONDUCT.md | 8 ---- SECURITY.md | 20 --------- setup.cfg | 5 --- setup.py | 32 -------------- tox.ini | 19 -------- 6 files changed, 191 deletions(-) delete mode 100644 CHANGELOG.md delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 SECURITY.md delete mode 100644 setup.cfg delete mode 100755 setup.py delete mode 100644 tox.ini diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 649275b..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,107 +0,0 @@ -# Changelog -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [Unreleased] - -## [2.2.2] - 2019-10-07 -### Fixed -* Reverted the move to using setuptools-scm as it's [not actually meant to be - used in the package code, only in setup.py](https://github.com/pypa/setuptools_scm/issues/354#issuecomment-519407730). - setuptools-scm was causing an `LookupError: setuptools-scm was unable to detect version` error - -## [2.2.1] - 2019-10-07 -### Added -* Mozilla code of conduct -* Long description to setup.py containing README -* End to end GitHub unit test and tox testing with pytest -* Integration with Travis CI - -### Changed -* Moved to SCM (git) driven version instead of a hard coded one -* VERSION constant from semver list (e.g. [2, 2, 1]) to string version (e.g. 2.2.1) - -### Removed -* mock module to avoid collision with builtin mock module -* STR_VERSION constant - -### Fixed -* TypeError when paginate is `True` and `sleep_on_ratelimit` is the default (#66 by [@huma23](https://github.com/huma23)) - -## [2.2.0] - 2019-01-16 -### Added -* GitHub pagination support, which can be enabled -* GitHub rate limiting support, enabled by default - -### Changed -* Changelog format changed to keepachangelog - -## [2.1] - 2018-04-13 - -* Support XML de-serialization. (pick from [next-xml]) -* Request body content-type serialization & charset encoding - -[next-xml]: 3d373435c8110612cad061e9a9b31a7a1abd752c - -## [2.0] - 2016-01-16 - -* Features: - - Setup.py, for easy installation (Marcos Hernández) - - Legit Python package - - `url_prefix`: Ability to add an always-on prefix to the url for an API -* Bugfixes: - - Use `application/octet-stream` for unknown media type - - Spell 'GitHub' correctly - -## [1.3] - 2015-08-31 - -A stable branch, with a lot of bug fixes! (Thanks to all who -contributed!) - -* Feature: Unit tests (Uriel Corfa, Joachim Durchholz) -* Grown-up Incomplete-request error message (Joachim Durchholz) -* bug: PATCH method (ala) -* bug: Allow using auth tokens without a username (Uriel Corfa) -* bug: Set content-type to JSON when sending a JSON request - (Jens Timmerman) - -## [1.2] - 2014-06-14 - -* Revamp the internals, adding extensibility and flexibility. Meanwhile, - the external API (i.e. via the GitHub class) is entirely unchanged - -* New test-suite. It is ad-hoc and primitive, but effective - -* Generic support for other REST web services - - - New top-level class (API) - - GitHub is now a subclass of the API class, and is the model for - creating new subclasses - - Facebook and SalesForce subclasses created, allowing (basic) - access to these web services - -## [1.1.1] - 2014-06-11 -* bug: Ensure Client.auth_header is always defined -* bug: Python-3 support for password authentication - -## [1.1] - 2014-06-06 - -* Includes the version in the user-agent string - -## 1.0 - 2014-06-06 - -* Has a version number. (Yippie!) -* First more-or-less stable version - -[Unreleased]: https://github.com/mozilla/agithub/compare/v2.2.2...HEAD -[2.2.2]: https://github.com/mozilla/agithub/compare/v2.2.1...v2.2.2 -[2.2.1]: https://github.com/mozilla/agithub/compare/v2.2.0...v2.2.1 -[2.2.0]: https://github.com/mozilla/agithub/compare/v2.1...v2.2.0 -[2.1]: https://github.com/mozilla/agithub/compare/v2.0...v2.1 -[2.0]: https://github.com/mozilla/agithub/compare/v1.3...v2.0 -[1.3]: https://github.com/mozilla/agithub/compare/v1.2...v1.3 -[1.2]: https://github.com/mozilla/agithub/compare/v1.1.1...v1.2 -[1.1.1]: https://github.com/mozilla/agithub/compare/v1.1...v1.1.1 -[1.1]: https://github.com/mozilla/agithub/compare/v1.0...v1.1 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index f0ef43f..0000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,8 +0,0 @@ -# Community Participation Guidelines - -This repository is governed by Mozilla's code of conduct and etiquette guidelines. -For more details, please read the -[Mozilla Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/). - -## How to Report -For more information on how to report violations of the Community Participation Guidelines, please read our '[How to Report](https://www.mozilla.org/about/governance/policies/participation/reporting/)' page. diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 8a4b544..0000000 --- a/SECURITY.md +++ /dev/null @@ -1,20 +0,0 @@ -# Security Policy - -## Security Announcements - -Security announcements will be recorded in the [CHANGELOG](CHANGELOG.md). - -## Reporting a Vulnerability - -To report a security vulnerability, email -agithub-security-vulnerability-report-2021@mozilla.com - -The members of this security vulnerability report mailing list can be configured -by Mozilla [here](https://groups.google.com/a/mozilla.com/g/agithub-security-vulnerability-report-2021). - -## Supported Versions - -agithub is an open source project and all support is community driven. As such -there are no specific versions which are supported. The newest released -version which should contain all security fixes can be found on the GitHub -[releases page](https://github.com/mozilla/agithub/releases) \ No newline at end of file diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 23fcba9..0000000 --- a/setup.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[egg_info] -tag_build = -tag_date = 0 -tag_svn_revision = 0 - diff --git a/setup.py b/setup.py deleted file mode 100755 index 91028ea..0000000 --- a/setup.py +++ /dev/null @@ -1,32 +0,0 @@ -from setuptools import setup, find_packages -from os import path - -here = path.abspath(path.dirname(__file__)) -with open(path.join(here, 'README.md')) as f: - long_description = f.read() - -version = '2.2.2' - -setup(name='arestclient', - version=version, - description="A lightweight, transparent syntax for REST clients", - long_description=long_description, - long_description_content_type='text/markdown', - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Environment :: Console', - 'Intended Audience :: Developers', - 'Operating System :: OS Independent', - 'Programming Language :: Python :: 2.6', - 'Programming Language :: Python :: 3', - 'Topic :: Utilities', - ], - keywords=['api', 'REST', 'GitHub', 'Facebook', 'SalesForce'], - author='Jonathan Paugh', - author_email='jpaugh@gmx.us', - url='https://github.com/michaeldorner/arestclient', - license='MIT', - packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), - include_package_data=True, - zip_safe=False, - ) diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 65e2673..0000000 --- a/tox.ini +++ /dev/null @@ -1,19 +0,0 @@ -[tox] -envlist = py27, py37, flake8 - -[gh-actions] -python = - 2.7: py27 - 3.7: py37, flake8 - -[testenv:flake8] -basepython = python -deps = flake8 -commands = flake8 arestclient setup.py - -[testenv] -setenv = - PYTHONPATH = {toxinidir} -deps = pytest -commands = - pytest {posargs} From c9b85963a5db9c9f58b22d321ed284e4601f3f8f Mon Sep 17 00:00:00 2001 From: Michael Dorner Date: Thu, 2 Feb 2023 12:30:40 +0100 Subject: [PATCH 3/5] Remove Python 2 support, improve PEP8 --- arestclient/base.py | 71 ++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 39 deletions(-) diff --git a/arestclient/base.py b/arestclient/base.py index 318f83c..7029797 100644 --- a/arestclient/base.py +++ b/arestclient/base.py @@ -3,16 +3,9 @@ import json from functools import partial, update_wrapper -import sys -if sys.version_info[0:2] > (3, 0): - from http.client import HTTPConnection, HTTPSConnection - from urllib.parse import urlencode -else: - from httplib import HTTPConnection, HTTPSConnection - from urllib import urlencode +from http.client import HTTPConnection, HTTPSConnection +from urllib.parse import urlencode - class ConnectionError(OSError): - pass VERSION = [2, 2, 2] STR_VERSION = 'v' + '.'.join(str(v) for v in VERSION) @@ -120,9 +113,9 @@ def __init__(self, username=None, password=None, token=None, # Set up connection properties if connection_properties is not None: - self.setConnectionProperties(connection_properties) + self.set_connection_properties(connection_properties) - def setConnectionProperties(self, prop): + def set_connection_properties(self, prop): """ Initialize the connection properties. This must be called (either by passing connection_properties=... to __init__ or @@ -135,7 +128,7 @@ def setConnectionProperties(self, prop): ) if prop.extra_headers is not None: - prop.filterEmptyHeaders() + prop.filter_empty_headers() self.default_headers = _default_headers.copy() self.default_headers.update(prop.extra_headers) self.prop = prop @@ -193,7 +186,7 @@ def request(self, method, url, bodyData, headers): """ headers = self._fix_headers(headers) - url = self.prop.constructUrl(url) + url = self.prop.construct_url(url) if bodyData is None: # Sending a content-type w/o the body might break some @@ -202,9 +195,9 @@ def request(self, method, url, bodyData, headers): del headers['content-type'] # TODO: Context manager - requestBody = RequestBody(bodyData, headers) + request_body = RequestBody(bodyData, headers) conn = self.get_connection() - conn.request(method, url, requestBody.process(), headers) + conn.request(method, url, request_body.process(), headers) response = conn.getresponse() status = response.status content = ResponseBody(response) @@ -250,14 +243,14 @@ class Body(object): """ Superclass for ResponseBody and RequestBody """ - def parseContentType(self, ctype): + def parse_content_type(self, ctype): """ Parse the Content-Type header, returning the media-type and any parameters """ if ctype is None: self.mediatype = 'application/octet-stream' - self.ctypeParameters = {'charset': 'ISO-8859-1'} + self.ctype_parameters = {'charset': 'ISO-8859-1'} return params = ctype.split(';') @@ -266,26 +259,26 @@ def parseContentType(self, ctype): # Parse parameters if len(params) > 0: params = map(lambda s: s.strip().split('='), params) - paramDict = {} + param_dict = {} for attribute, value in params: # TODO: Find out if specifying an attribute multiple # times is even okay, and how it should be handled attribute = attribute.lower() - if attribute in paramDict: - if type(paramDict[attribute]) is not list: + if attribute in param_dict: + if type(param_dict[attribute]) is not list: # Convert singleton value to value-list - paramDict[attribute] = [paramDict[attribute]] + param_dict[attribute] = [param_dict[attribute]] # Insert new value along with pre-existing ones - paramDict[attribute] += value + param_dict[attribute] += value else: # Insert singleton attribute value - paramDict[attribute] = value - self.ctypeParameters = paramDict + param_dict[attribute] = value + self.ctype_parameters = param_dict else: - self.ctypeParameters = {} + self.ctype_parameters = {} - if 'charset' not in self.ctypeParameters: - self.ctypeParameters['charset'] = 'ISO-8859-1' + if 'charset' not in self.ctype_parameters: + self.ctype_parameters['charset'] = 'ISO-8859-1' # NB: INO-8859-1 is specified (RFC 2068) as the default # charset in case none is provided @@ -303,8 +296,8 @@ class ResponseBody(Body): def __init__(self, response): self.response = response self.body = response.read() - self.parseContentType(self.response.getheader('Content-Type')) - self.encoding = self.ctypeParameters['charset'] + self.parse_content_type(self.response.getheader('Content-Type')) + self.encoding = self.ctype_parameters['charset'] def decode_body(self): """ @@ -344,7 +337,7 @@ def application_json(self): return pybody - text_javascript = application_json + # text_javascript = application_json # XXX: This isn't technically correct, but we'll hope for the best. # Patches welcome! # Insert new media-type handlers here @@ -358,10 +351,10 @@ class RequestBody(Body): def __init__(self, body, headers): self.body = body self.headers = headers - self.parseContentType(self.headers.get('content-type', None)) - self.encoding = self.ctypeParameters['charset'] + self.parse_content_type(self.headers.get('content-type', None)) + self.encoding = self.ctype_parameters['charset'] - def encodeBody(self): + def encode_body(self): """ Encode (and overwrite) self.body via the charset encoding specified in the request headers. This should be called by the @@ -393,7 +386,7 @@ def application_octet_stream(self): def application_json(self): self.body = json.dumps(self.body) - self.encodeBody() + self.encode_body() return self.body # Insert new Request media-type handlers here @@ -414,19 +407,19 @@ def __init__(self, **props): else: setattr(self, key, val) - def constructUrl(self, url): + def construct_url(self, url): if self.url_prefix is None: return url return self.url_prefix + url - def filterEmptyHeaders(self): + def filter_empty_headers(self): if self.extra_headers is not None: self.extra_headers = self._filterEmptyHeaders(self.extra_headers) def _filterEmptyHeaders(self, headers): - newHeaders = {} + new_headers = {} for header in headers.keys(): if header is not None and header != "": - newHeaders[header] = headers[header] + new_headers[header] = headers[header] - return newHeaders + return new_headers From 2d7a407b9ffee18596007affc3e49ebb6d683fc4 Mon Sep 17 00:00:00 2001 From: Michael Dorner Date: Thu, 2 Feb 2023 15:46:39 +0100 Subject: [PATCH 4/5] Update GitHub.py --- arestclient/GitHub.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arestclient/GitHub.py b/arestclient/GitHub.py index b443db3..32d0a03 100644 --- a/arestclient/GitHub.py +++ b/arestclient/GitHub.py @@ -86,7 +86,7 @@ def request(self, method, url, bodyData, headers): """Low-level networking. All HTTP-method methods call this""" headers = self._fix_headers(headers) - url = self.prop.constructUrl(url) + url = self.prop.construct_url(url) if bodyData is None: # Sending a content-type w/o the body might break some From 7db7454de0425b0e43d7ce6715d891f1418cb29f Mon Sep 17 00:00:00 2001 From: Michael Dorner Date: Thu, 2 Feb 2023 15:46:46 +0100 Subject: [PATCH 5/5] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 3ed3a23..48d5965 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ build/ dist/ .tox .eggs +.DS_Store