MCPcopy Create free account
hub / github.com/davidblewett/rure-python / Crate

Class Crate

regex/scripts/scrape_crates_io.py:129–185  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

127
128
129class Crate(object):
130 def __init__(self, work_dir, name, version):
131 self.name = name
132 self.version = version
133 self.url = ("https://crates.io/api/v1/crates/{name}/{version}/download"
134 .format(name=self.name, version=self.version))
135 self.filename = "{}/{}-{}.tar.gz".format(
136 work_dir, self.name, self.version)
137
138 def __enter__(self):
139 max_retries = 1
140 retries = 0
141 while retries < max_retries:
142 retries += 1
143
144 r = http.request("GET", self.url, preload_content=False)
145 try:
146 print("[{}/{}] Downloading {}".format(
147 retries, max_retries + 1, self.url))
148 with open(self.filename, "wb") as f:
149 while True:
150 data = r.read(1024)
151 if not data:
152 break
153 f.write(data)
154 except requests.exceptions.ConnectionError:
155 time.sleep(1)
156 r.release_conn()
157 continue
158
159 r.release_conn()
160 break
161
162 call(["tar", "-xf", self.filename])
163
164 return self
165
166 def __exit__(self, ty, value, tb):
167 # We are going to clean up the whole temp dir anyway, so
168 # we don't really need to do this. Its nice to clean up
169 # after ourselves though.
170 try:
171 shutil.rmtree(self.filename[:-len(".tar.gz")])
172 os.remove(self.filename)
173 except _:
174 pass
175
176 def iter_srcs(self):
177 g = "{crate}/**/*.rs".format(crate=self.filename[:-len(".tar.gz")])
178 for rsrc in glob.iglob(g):
179 yield rsrc
180
181 def iter_lines(self):
182 for src in self.iter_srcs():
183 with open(src) as f:
184 for line in f:
185 yield line
186

Callers 1

mainFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected