Esempio n. 1
0
 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)
Esempio n. 2
0
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)
Esempio n. 3
0
 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))
Esempio n. 4
0
File: etag.py Progetto: Pylons/webob
 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))
Esempio n. 5
0
    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"
Esempio n. 6
0
    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"
Esempio n. 7
0
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
Esempio n. 8
0
    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"
Esempio n. 9
0
def test_parse_date_valid(valid_date, parsed_datetime):
    assert datetime_utils.parse_date(valid_date) == parsed_datetime
Esempio n. 10
0
def test_parse_date_invalid(invalid_date):
    assert datetime_utils.parse_date(invalid_date) is None