def get_file(self, url): #check if in chache data_dict = self.ds.retrieve_dict(url) headers = self.check_if_valid_file_last_update(url) if data_dict is not None and headers is not None: # get the f*****g date from the header if datetime_utils.parse_date(headers['Last-Modified']) > datetime_utils.parse_date(data_dict['time']): self.download(url) for path in data_dict['path']: os.remove(path) self.ds.remove_dict(url) else: return data_dict['path'] else: return self.download(url)
def test_parse_date(): """Testing datetime_utils.parse_date. We need to verify the following scenarios: * a nil submitted value * a submitted value that cannot be parse into a date * a valid RFC2822 date with and without timezone """ ret = datetime_utils.parse_date(None) ok_(ret is None, "We passed a None value " "to parse_date. We should get None but instead we got %s" %\ ret) ret = datetime_utils.parse_date('Hi There') ok_(ret is None, "We passed an invalid value " "to parse_date. We should get None but instead we got %s" %\ ret) ret = datetime_utils.parse_date(1) ok_(ret is None, "We passed an invalid value " "to parse_date. We should get None but instead we got %s" %\ ret) ret = datetime_utils.parse_date('á') ok_(ret is None, "We passed an invalid value " "to parse_date. We should get None but instead we got %s" %\ ret) ret = datetime_utils.parse_date('Mon, 20 Nov 1995 19:12:08 -0500') eq_(ret, datetime.datetime( 1995, 11, 21, 0, 12, 8, tzinfo=datetime_utils.UTC)) ret = datetime_utils.parse_date('Mon, 20 Nov 1995 19:12:08') eq_(ret, datetime.datetime(1995, 11, 20, 19, 12, 8, tzinfo=datetime_utils.UTC)) ret = datetime_utils.parse_date(Uncooperative()) eq_(ret, None)
def parse(cls, value): """ Parse this from a header value. """ if not value: return cls(AnyETag) elif value.endswith(" GMT"): # Must be a date return IfRangeDate(parse_date(value)) else: return cls(ETagMatcher.parse(value))
def test_serves_signature_file(self, db_request): project = ProjectFactory.create() release = ReleaseFactory.create(project=project) file_ = FileFactory.create( release=release, filename="{}-{}.tar.gz".format(project.name, release.version), python_version="source", has_signature=True, ) path = "/".join([ file_.blake2_256_digest[:2], file_.blake2_256_digest[2:4], file_.blake2_256_digest[4:], file_.filename + ".asc", ]) storage_service = pretend.stub( get=pretend.call_recorder( lambda path: io.BytesIO(b"some data for the fake file") ) ) db_request.matchdict["path"] = path db_request.find_service = pretend.call_recorder( lambda iface: storage_service ) resp = views.packages(db_request) # We want to roundtrip our upload_time last_modified = datetime_utils.parse_date( datetime_utils.serialize_date(file_.upload_time) ) assert db_request.find_service.calls == [pretend.call(IFileStorage)] assert storage_service.get.calls == [pretend.call(path)] assert resp.content_type == "application/octet-stream" assert resp.content_encoding is None assert resp.etag == file_.md5_digest assert resp.last_modified == last_modified assert resp.content_length is None # This needs to be last, as accessing resp.body sets the content_length assert resp.body == b"some data for the fake file"
def test_serves_signature_file(self, db_request): project = ProjectFactory.create() release = ReleaseFactory.create(project=project) file_ = FileFactory.create( release=release, filename="{}-{}.tar.gz".format(project.name, release.version), python_version="source", has_signature=True, ) path = "/".join([ file_.blake2_256_digest[:2], file_.blake2_256_digest[2:4], file_.blake2_256_digest[4:], file_.filename + ".asc", ]) storage_service = pretend.stub(get=pretend.call_recorder( lambda path: io.BytesIO(b"some data for the fake file"))) db_request.matchdict["path"] = path db_request.find_service = pretend.call_recorder( lambda iface: storage_service) resp = views.packages(db_request) # We want to roundtrip our upload_time last_modified = datetime_utils.parse_date( datetime_utils.serialize_date(file_.upload_time)) assert db_request.find_service.calls == [pretend.call(IFileStorage)] assert storage_service.get.calls == [pretend.call(path)] assert resp.content_type == "application/octet-stream" assert resp.content_encoding is None assert resp.etag == file_.md5_digest assert resp.last_modified == last_modified assert resp.content_length is None # This needs to be last, as accessing resp.body sets the content_length assert resp.body == b"some data for the fake file"
def test_parse_date(): """Testing datetime_utils.parse_date. We need to verify the following scenarios: * a nil submitted value * a submitted value that cannot be parse into a date * a valid RFC2822 date with and without timezone """ ret = datetime_utils.parse_date(None) assert ret is None, ( "We passed a None value to parse_date. We should get" " None but instead we got %s" % ret ) ret = datetime_utils.parse_date("Hi There") assert ret is None, ( "We passed an invalid value to parse_date. We should" " get None but instead we got %s" % ret ) ret = datetime_utils.parse_date(1) assert ret is None, ( "We passed an invalid value to parse_date. We should" " get None but instead we got %s" % ret ) ret = datetime_utils.parse_date("\xc3") assert ret is None, ( "We passed an invalid value to parse_date. We should" " get None but instead we got %s" % ret ) ret = datetime_utils.parse_date("Mon, 20 Nov 1995 19:12:08 -0500") assert ret == datetime.datetime(1995, 11, 21, 0, 12, 8, tzinfo=datetime_utils.UTC) ret = datetime_utils.parse_date("Mon, 20 Nov 1995 19:12:08") assert ret == datetime.datetime(1995, 11, 20, 19, 12, 8, tzinfo=datetime_utils.UTC) ret = datetime_utils.parse_date(Uncooperative()) assert ret is None
def test_serves_signature_file(self, db_request, pyramid_config): memfs = fs.memoryfs.MemoryFS() pyramid_config.registry["filesystems"] = {"packages": memfs} project = ProjectFactory.create() release = ReleaseFactory.create(project=project) file_ = FileFactory.create( release=release, filename="{}-{}.tar.gz".format(project.name, release.version), python_version="source", ) path = "source/{}/{}/{}.asc".format( project.name[0], project.name, file_.filename ) memfs.makedir(os.path.dirname(path), recursive=True) memfs.setcontents(path, b"some data for the fake file") db_request.matchdict["path"] = path resp = views.packages(db_request) # We want to roundtrip our upload_time last_modified = datetime_utils.parse_date( datetime_utils.serialize_date(file_.upload_time) ) assert resp.content_type == "application/octet-stream" assert resp.content_encoding is None assert resp.etag == file_.md5_digest assert resp.last_modified == last_modified assert resp.content_length is None # This needs to be last, as accessing resp.body sets the content_length assert resp.body == b"some data for the fake file"
def test_parse_date_valid(valid_date, parsed_datetime): assert datetime_utils.parse_date(valid_date) == parsed_datetime
def test_parse_date_invalid(invalid_date): assert datetime_utils.parse_date(invalid_date) is None