dependabot-python 0.118.8 → 0.119.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9960f0164740e21e8840ed3bbace2c82b51a74170a3b77fc48c4379d79e288b8
4
- data.tar.gz: 7a2287ea82a4f3794965fbb3f08deb4600d6347aefe1ebfeaac5373be6499ada
3
+ metadata.gz: 0c443c75018adfd2cf364c97de4ef952789b4b1d279c9ef325ee181e8f46cd56
4
+ data.tar.gz: 3ef40c7a0ac388eea5b3a2ea5b70ca5019a0110088fae84e5913c2584d37eb8d
5
5
  SHA512:
6
- metadata.gz: b5f766297c4ca83adf22e0df25aca4f65e774dea1354aa690b79be17a9f81308610df350e8ed4a9e4c140e61c42f7a7a3efb7bd4e2b25ca5baa3241ad508e932
7
- data.tar.gz: c4ab053b8219818d3334f560119ece67e65a263437c50e07dceeb62891f370bd955a9472e0177ad8d94df876e8cb230bd210b6e06b3c6829a50f1275bd14a03c
6
+ metadata.gz: 13bcdc6647e905be59181cac53a5e79073531940e291684b9431b68bbb16702871d56c964ea4ba4cdee736ec74f050db09b94bd0ba2b370813e5c4ae9cf7e144
7
+ data.tar.gz: 8f7113e04bf9c2c2fd727ecba7c7240d1f7f518237f4c8361531370e3fa86fb712d22544bbfe5751fee6296749c3dfc179c786bdd41a3db241d164a5cd5fb6ca
@@ -0,0 +1,24 @@
1
+ import hashin
2
+ import json
3
+ import pipfile
4
+ from poetry.poetry import Poetry
5
+ from poetry.factory import Factory
6
+
7
+ def get_dependency_hash(dependency_name, dependency_version, algorithm):
8
+ hashes = hashin.get_package_hashes(
9
+ dependency_name,
10
+ version=dependency_version,
11
+ algorithm=algorithm
12
+ )
13
+
14
+ return json.dumps({ "result": hashes["hashes"] })
15
+
16
+ def get_pipfile_hash(directory):
17
+ p = pipfile.load(directory + '/Pipfile')
18
+
19
+ return json.dumps({ "result": p.hash })
20
+
21
+ def get_pyproject_hash(directory):
22
+ p = Factory().create_poetry(directory)
23
+
24
+ return json.dumps({ "result": p.locker._get_content_hash() })
@@ -0,0 +1,138 @@
1
+ from itertools import chain
2
+ import glob
3
+ import io
4
+ import json
5
+ import optparse
6
+ import os.path
7
+ import re
8
+
9
+ import setuptools
10
+ import pip._internal.req.req_file
11
+ from pip._internal.network.session import PipSession
12
+ from pip._internal.models.format_control import FormatControl
13
+ from pip._internal.req.constructors import (
14
+ install_req_from_line,
15
+ install_req_from_parsed_requirement,
16
+ )
17
+
18
+ def parse_requirements(directory):
19
+ # Parse the requirements.txt
20
+ requirement_packages = []
21
+ requirement_files = glob.glob(os.path.join(directory, '*.txt')) \
22
+ + glob.glob(os.path.join(directory, '**', '*.txt'))
23
+
24
+ pip_compile_files = glob.glob(os.path.join(directory, '*.in')) \
25
+ + glob.glob(os.path.join(directory, '**', '*.in'))
26
+
27
+ def version_from_install_req(install_req):
28
+ if install_req.is_pinned:
29
+ return next(iter(install_req.specifier)).version
30
+
31
+ for reqs_file in requirement_files + pip_compile_files:
32
+ try:
33
+ requirements = pip._internal.req.req_file.parse_requirements(
34
+ reqs_file,
35
+ session=PipSession()
36
+ )
37
+ for parsed_req in requirements:
38
+ install_req = install_req_from_parsed_requirement(parsed_req)
39
+ if install_req.original_link:
40
+ continue
41
+
42
+ pattern = r"-[cr] (.*) \(line \d+\)"
43
+ abs_path = re.search(pattern, install_req.comes_from).group(1)
44
+ rel_path = os.path.relpath(abs_path, directory)
45
+
46
+ requirement_packages.append({
47
+ "name": install_req.req.name,
48
+ "version": version_from_install_req(install_req),
49
+ "markers": str(install_req.markers) or None,
50
+ "file": rel_path,
51
+ "requirement": str(install_req.specifier) or None,
52
+ "extras": sorted(list(install_req.extras))
53
+ })
54
+ except Exception as e:
55
+ print(json.dumps({ "error": repr(e) }))
56
+ exit(1)
57
+
58
+ return json.dumps({ "result": requirement_packages })
59
+
60
+ def parse_setup(directory):
61
+ # Parse the setup.py
62
+ setup_packages = []
63
+ if os.path.isfile(directory + '/setup.py'):
64
+ def version_from_install_req(install_req):
65
+ if install_req.is_pinned:
66
+ return next(iter(install_req.specifier)).version
67
+
68
+ def parse_requirement(req, req_type):
69
+ install_req = install_req_from_line(req)
70
+ if install_req.original_link:
71
+ return
72
+
73
+ setup_packages.append({
74
+ "name": install_req.req.name,
75
+ "version": version_from_install_req(install_req),
76
+ "markers": str(install_req.markers) or None,
77
+ "file": "setup.py",
78
+ "requirement": str(install_req.specifier) or None,
79
+ "requirement_type": req_type,
80
+ "extras": sorted(list(install_req.extras))
81
+ })
82
+
83
+ def setup(*args, **kwargs):
84
+ for arg in ['setup_requires', 'install_requires', 'tests_require']:
85
+ if not kwargs.get(arg):
86
+ continue
87
+ for req in kwargs.get(arg):
88
+ parse_requirement(req, arg)
89
+ extras_require_dict = kwargs.get('extras_require', {})
90
+ for key in extras_require_dict:
91
+ for req in extras_require_dict[key]:
92
+ parse_requirement(req, 'extras_require:{}'.format(key))
93
+ setuptools.setup = setup
94
+
95
+ def noop(*args, **kwargs):
96
+ pass
97
+
98
+ def fake_parse(*args, **kwargs):
99
+ return []
100
+
101
+ global fake_open
102
+ def fake_open(*args, **kwargs):
103
+ content = ("VERSION = ('0', '0', '1+dependabot')\n"
104
+ "__version__ = '0.0.1+dependabot'\n"
105
+ "__author__ = 'someone'\n"
106
+ "__title__ = 'something'\n"
107
+ "__description__ = 'something'\n"
108
+ "__author_email__ = 'something'\n"
109
+ "__license__ = 'something'\n"
110
+ "__url__ = 'something'\n")
111
+ return io.StringIO(content)
112
+
113
+ content = open(directory + '/setup.py', 'r').read()
114
+
115
+ # Remove `print`, `open`, `log` and import statements
116
+ content = re.sub(r"print\s*\(", "noop(", content)
117
+ content = re.sub(r"log\s*(\.\w+)*\(", "noop(", content)
118
+ content = re.sub(r"\b(\w+\.)*(open|file)\s*\(", "fake_open(", content)
119
+ content = content.replace("parse_requirements(", "fake_parse(")
120
+ version_re = re.compile(r"^.*import.*__version__.*$", re.MULTILINE)
121
+ content = re.sub(version_re, "", content)
122
+
123
+ # Set variables likely to be imported
124
+ __version__ = '0.0.1+dependabot'
125
+ __author__ = 'someone'
126
+ __title__ = 'something'
127
+ __description__ = 'something'
128
+ __author_email__ = 'something'
129
+ __license__ = 'something'
130
+ __url__ = 'something'
131
+
132
+ # Run as main (since setup.py is a script)
133
+ __name__ = '__main__'
134
+
135
+ # Exec the setup.py
136
+ exec(content) in globals(), locals()
137
+
138
+ return json.dumps({ "result": setup_packages })
@@ -0,0 +1,9 @@
1
+ pip==20.1.1
2
+ pip-tools==5.3.0
3
+ hashin==0.15.0
4
+ pipenv==2018.11.26
5
+ pipfile==0.0.2
6
+ poetry==1.0.10
7
+
8
+ # Some dependencies will only install if Cython is present
9
+ Cython==0.29.21
@@ -0,0 +1,18 @@
1
+ import sys
2
+ import json
3
+
4
+ from lib import parser, hasher
5
+
6
+ if __name__ == "__main__":
7
+ args = json.loads(sys.stdin.read())
8
+
9
+ if args["function"] == "parse_requirements":
10
+ print(parser.parse_requirements(args["args"][0]))
11
+ if args["function"] == "parse_setup":
12
+ print(parser.parse_setup(args["args"][0]))
13
+ elif args["function"] == "get_dependency_hash":
14
+ print(hasher.get_dependency_hash(*args["args"]))
15
+ elif args["function"] == "get_pipfile_hash":
16
+ print(hasher.get_pipfile_hash(*args["args"]))
17
+ elif args["function"] == "get_pyproject_hash":
18
+ print(hasher.get_pyproject_hash(*args["args"]))
@@ -1,5 +1,5 @@
1
1
  pip==20.1.1
2
- pip-tools==5.2.1
2
+ pip-tools==5.3.1
3
3
  hashin==0.15.0
4
4
  pipenv==2018.11.26
5
5
  pipfile==0.0.2
@@ -3,6 +3,7 @@
3
3
  module Dependabot
4
4
  module Python
5
5
  class AuthedUrlBuilder
6
+ # rubocop:disable Metrics/PerceivedComplexity
6
7
  def self.authed_url(credential:)
7
8
  token = credential.fetch("token", nil)
8
9
  url = credential.fetch("index-url")
@@ -16,8 +17,14 @@ module Dependabot
16
17
  else token
17
18
  end
18
19
 
20
+ if basic_auth_details.include?(":")
21
+ username, _, password = basic_auth_details.partition(":")
22
+ basic_auth_details = "#{CGI.escape(username)}:#{CGI.escape(password)}"
23
+ end
24
+
19
25
  url.sub("://", "://#{basic_auth_details}@")
20
26
  end
27
+ # rubocop:enable Metrics/PerceivedComplexity
21
28
  end
22
29
  end
23
30
  end
@@ -11,7 +11,7 @@ module Dependabot
11
11
  # the Dependabot container.
12
12
  SUPPORTED_VERSIONS = %w(
13
13
  3.8.5 3.8.4 3.8.3 3.8.2 3.8.1 3.8.0
14
- 3.7.7 3.7.6 3.7.5 3.7.4 3.7.3 3.7.2 3.7.1 3.7.0
14
+ 3.7.8 3.7.7 3.7.6 3.7.5 3.7.4 3.7.3 3.7.2 3.7.1 3.7.0
15
15
  3.6.9 3.6.8 3.6.7 3.6.6 3.6.5 3.6.4 3.6.3 3.6.2 3.6.1 3.6.0
16
16
  3.5.7 3.5.6 3.5.5 3.5.4 3.5.3
17
17
  2.7.18 2.7.17 2.7.16 2.7.15 2.7.14 2.7.13
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-python
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.118.8
4
+ version: 0.119.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-24 00:00:00.000000000 Z
11
+ date: 2020-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dependabot-common
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.118.8
19
+ version: 0.119.0.beta1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.118.8
26
+ version: 0.119.0.beta1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -94,20 +94,6 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.2'
97
- - !ruby/object:Gem::Dependency
98
- name: rspec_junit_formatter
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '0.4'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '0.4'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: rubocop
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -158,6 +144,11 @@ extensions: []
158
144
  extra_rdoc_files: []
159
145
  files:
160
146
  - helpers/build
147
+ - helpers/install-dir/python/lib/__init__.py
148
+ - helpers/install-dir/python/lib/hasher.py
149
+ - helpers/install-dir/python/lib/parser.py
150
+ - helpers/install-dir/python/requirements.txt
151
+ - helpers/install-dir/python/run.py
161
152
  - helpers/lib/__init__.py
162
153
  - helpers/lib/hasher.py
163
154
  - helpers/lib/parser.py
@@ -200,7 +191,7 @@ homepage: https://github.com/dependabot/dependabot-core
200
191
  licenses:
201
192
  - Nonstandard
202
193
  metadata: {}
203
- post_install_message:
194
+ post_install_message:
204
195
  rdoc_options: []
205
196
  require_paths:
206
197
  - lib
@@ -215,8 +206,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
215
206
  - !ruby/object:Gem::Version
216
207
  version: 2.5.0
217
208
  requirements: []
218
- rubygems_version: 3.0.3
219
- signing_key:
209
+ rubygems_version: 3.1.4
210
+ signing_key:
220
211
  specification_version: 4
221
212
  summary: Python support for dependabot
222
213
  test_files: []