datadog-sdk-testing 0.5.0 → 0.5.1

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
  SHA1:
3
- metadata.gz: e44e65983bc61091e09056f2a4c0915ef278bd26
4
- data.tar.gz: ac179c9a1273e47e0224c21caa1de6762cd431fa
3
+ metadata.gz: 013c7b5b9ff3626e2f2924adb8ff35ce45bd5a21
4
+ data.tar.gz: e53a7fbbc1dcd7a43dc6f34fbbccc4af375df50e
5
5
  SHA512:
6
- metadata.gz: d763f040338c25d0db5ad817055906dfff23f2103428b6ae322ef4b9b43829acadbab321fc29ef7dc3cb8f0a7494e6c171ee0efa9edf34795da45b7d83f13402
7
- data.tar.gz: aacc3d99aeb93c3badb7564f10afbf47cd9352c7eb73fb2bdfa8d3541a30ce11c60c61fd1d5eeda1da8c86ba0d8bdba4ea96ce4bdf10540d91b32852d159ffd3
6
+ metadata.gz: a2d11c175dc4d8943e879056a6d718caa7ae1ff09594da070ea6cd97f7aded0c9439f689bdd8b2c415180d054b3cfea567f7b0687a008d7765e088cc281be280
7
+ data.tar.gz: f587725bbbf302383fc599875ff844a074cba08ab755a21d72c681bf41c73134624c225e0a3aa2faadaa3491144f13cc18791dca344268c8d0bdfb0b63a0a80d
@@ -31,12 +31,15 @@ def two_fa():
31
31
 
32
32
  class RequirementsAnalyzer(object):
33
33
  SPECIFIERS = ['==', '!=' '<=', '>=', '<', '>']
34
+ COMMENT = '#'
34
35
 
35
- def __init__(self, remote, local, patterns=['requirements.txt'], verbose=False):
36
+ def __init__(self, remote, local, patterns=['requirements.txt'],
37
+ ignorable=[], verbose=False):
36
38
  self.api = None
37
39
  self.remote_sources = remote
38
40
  self.local_sources = local
39
41
  self.req_patterns = patterns
42
+ self.req_ignore = ignorable
40
43
  self.verbose = verbose
41
44
 
42
45
  if github3:
@@ -69,28 +72,48 @@ class RequirementsAnalyzer(object):
69
72
  files[content.name] = content
70
73
  continue
71
74
 
72
- req = gh_repo.file_contents("/{}/requirements.txt".format(entry))
73
- reqs[entry] = req.decoded
75
+ req_file = "/{}/requirements.txt".format(entry)
76
+ if self.req_ignore:
77
+ for pattern in self.req_ignore:
78
+ if not fnmatch.fnmatchcase(req_file, pattern):
79
+ req = gh_repo.file_contents(req_file)
80
+ reqs[entry] = req.decoded
81
+ break
82
+ else:
83
+ req = gh_repo.file_contents(req_file)
84
+ reqs[entry] = req.decoded
74
85
 
75
86
  fmatches = []
76
87
  for pattern in self.req_patterns:
77
- fmatches.extend(fnmatch.filter(files.keys(), pattern))
88
+ hits = fnmatch.filter(files.keys(), pattern)
89
+ fmatches.extend(hits)
78
90
 
91
+ fmatches = self.filter_matches(fmatches) # filter/remove duplicates
79
92
  for match in fmatches:
80
93
  req = gh_repo.file_contents(files[match].path)
81
94
  reqs[match] = req.decoded
82
95
 
83
96
  return reqs
84
97
 
85
- def get_local_files(self):
98
+ def get_local_files(self, src):
86
99
  matches = []
87
- for src in self.local_sources:
100
+ for root, dirnames, filenames in os.walk(src):
88
101
  for pattern in self.req_patterns:
89
- for root, dirnames, filenames in os.walk(src):
90
- for filename in fnmatch.filter(filenames, pattern):
91
- matches.append(os.path.join(root, filename))
102
+ hits = [os.path.join(root, hit) for hit in fnmatch.filter(filenames, pattern)]
103
+ hits = self.filter_matches(hits)
104
+ matches.extend(hits)
92
105
 
93
- return matches
106
+ return list(set(matches))
107
+
108
+ def filter_matches(self, matches):
109
+ if not self.req_ignore:
110
+ return matches
111
+
112
+ excluded = []
113
+ for pattern in self.req_ignore:
114
+ excluded.extend(fnmatch.filter(matches, pattern))
115
+
116
+ return list(set(matches)-set(excluded))
94
117
 
95
118
  def get_local_contents(self, files):
96
119
  local_reqs = {}
@@ -116,7 +139,7 @@ class RequirementsAnalyzer(object):
116
139
  print 'No Github API set (missing creds?) cant crawl remotes.'
117
140
 
118
141
  for local in self.local_sources:
119
- requirements = self.get_local_contents(self.get_local_files())
142
+ requirements = self.get_local_contents(self.get_local_files(local))
120
143
  reqs[local] = requirements
121
144
 
122
145
  return reqs
@@ -133,6 +156,14 @@ class RequirementsAnalyzer(object):
133
156
 
134
157
  for line in mycontent:
135
158
  line = "".join(line.split())
159
+ comment_idx = line.find(self.COMMENT)
160
+ if comment_idx >= 0:
161
+ line = line[:comment_idx]
162
+
163
+ if not any(sep in line for sep in self.SPECIFIERS):
164
+ reqs[line] = ('unpinned', integration, source)
165
+ continue
166
+
136
167
  for specifier in self.SPECIFIERS:
137
168
  idx = line.find(specifier)
138
169
  if idx < 0:
@@ -143,11 +174,12 @@ class RequirementsAnalyzer(object):
143
174
 
144
175
  if req in reqs and reqs[req][0] != specifier:
145
176
  # version mismatch
146
- print "There's a version mismatch with {req} " \
147
- " {spec} and {prev_spec} defined in {src} " \
177
+ print "There's a version mismatch with {req} {spec} " \
178
+ "@ {offense} and {prev_spec} defined in {src} " \
148
179
  "@ {repo}.".format(
149
180
  req=req,
150
181
  spec=specifier,
182
+ offense=source,
151
183
  prev_spec=reqs[req][0],
152
184
  src=reqs[req][1],
153
185
  repo=reqs[req][2]
@@ -167,6 +199,14 @@ def str2bool(v):
167
199
  def main(args):
168
200
  remote = local = []
169
201
  verbose = str2bool(os.environ.get('VERBOSE', 'false'))
202
+ patterns = os.environ.get('REQ_PATTERNS', 'requirements*.txt')
203
+ if patterns:
204
+ patterns = patterns.split(',')
205
+
206
+ ignorable = os.environ.get('REQ_IGNORE_PATH', None)
207
+ if ignorable:
208
+ ignorable = ignorable.split(',')
209
+
170
210
  if not len(args):
171
211
  remote = [repo.strip() for repo in os.environ.get('REQ_REMOTES', '').split(',')]
172
212
  local = [repo.strip() for repo in os.environ.get('REQ_LOCALS', '').split(',')]
@@ -178,8 +218,10 @@ def main(args):
178
218
  else:
179
219
  local = ['.']
180
220
 
181
- analyzer = RequirementsAnalyzer(
182
- remote=remote, local=local, patterns=['requirements*.txt'], verbose=verbose)
221
+ analyzer = RequirementsAnalyzer(remote=remote, local=local,
222
+ patterns=patterns,
223
+ ignorable=ignorable,
224
+ verbose=verbose)
183
225
 
184
226
  err, reqs = analyzer.process_requirements(analyzer.get_all_requirements())
185
227
  if not err:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datadog-sdk-testing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jaime Fullaondo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-13 00:00:00.000000000 Z
11
+ date: 2017-02-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Datadog Integration SDK testing/scaffolding gem
14
14
  email: jaime.fullaondo@datadoghq.com