Skip to content

Commit

Permalink
Merge pull request #249 from pypa/bug/220
Browse files Browse the repository at this point in the history
Fix --skip-existing with a new package upload
  • Loading branch information
sigmavirus24 authored May 22, 2017
2 parents dd40b39 + 120558f commit ceb83fa
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 1 deletion.
49 changes: 49 additions & 0 deletions tests/test_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,12 @@
# 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.
import requests

from twine import repository

import pretend


def test_gpg_signature_structure_is_preserved():
data = {
Expand Down Expand Up @@ -90,3 +94,48 @@ def test_make_user_agent_string():
assert 'requests-toolbelt/' in user_agent
assert 'pkginfo/' in user_agent
assert 'setuptools/' in user_agent


def response_with(**kwattrs):
resp = requests.Response()
for attr, value in kwattrs.items():
if hasattr(resp, attr):
setattr(resp, attr, value)

return resp


def test_package_is_uploaded_404s():
repo = repository.Repository(
repository_url='https://pypi.python.org/pypi',
username='username',
password='password',
)
repo.session = pretend.stub(
get=lambda url, headers: response_with(status_code=404)
)
package = pretend.stub(
safe_name='fake',
metadata=pretend.stub(version='2.12.0'),
)

assert repo.package_is_uploaded(package) is False


def test_package_is_uploaded_200s_with_no_releases():
repo = repository.Repository(
repository_url='https://pypi.python.org/pypi',
username='username',
password='password',
)
repo.session = pretend.stub(
get=lambda url, headers: response_with(status_code=200,
_content=b'{"releases": {}}',
_content_consumed=True),
)
package = pretend.stub(
safe_name='fake',
metadata=pretend.stub(version='2.12.0'),
)

assert repo.package_is_uploaded(package) is False
5 changes: 4 additions & 1 deletion twine/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,10 @@ def package_is_uploaded(self, package, bypass_cache=False):
url=LEGACY_PYPI)
headers = {'Accept': 'application/json'}
response = self.session.get(url, headers=headers)
releases = response.json()['releases']
if response.status_code == 200:
releases = response.json()['releases']
else:
releases = {}
self._releases_json_data[safe_name] = releases

packages = releases.get(package.metadata.version, [])
Expand Down

0 comments on commit ceb83fa

Please sign in to comment.