def test_get_file_urls(name, values, urls, dbapp): # prepare db dbapp.engine.execute(packages.insert().values(name=name)) for value in values: dbapp.engine.execute(release_files.insert().values(name=name, **value)) assert dbapp.models.packaging.get_file_urls(name) == [FileURL(f, u) for f, u in sorted(set(urls), reverse=True)]
def test_get_filename_md5(filename, md5, dbapp): # prepare database dbapp.engine.execute( release_files.insert().values(filename=filename, md5_digest=md5) ) assert dbapp.db.packaging.get_filename_md5(filename) == md5
def test_get_project_for_filename(name, filename, dbapp): # prepare database dbapp.engine.execute( release_files.insert().values(name=name, filename=filename) ) assert dbapp.db.packaging.get_project_for_filename(filename) == name
def test_get_download_count(dbapp): dbapp.engine.execute(packages.insert().values(name="foo")) dbapp.engine.execute(releases.insert().values(name="foo", version="1.0")) dbapp.engine.execute(release_files.insert().values( name="foo", version="1.0", filename="foo-1.0.tar.gz", downloads=15, )) dbapp.engine.execute(release_files.insert().values( name="foo", version="1.0", filename="foo-1.0.tar.bz2", downloads=12, )) assert dbapp.models.packaging.get_download_count() == 27
def test_get_downloads(pgp, dbapp, monkeypatch): dbapp.engine.execute(packages.insert().values(name="test-project")) dbapp.engine.execute(releases.insert().values( name="test-project", version="1.0", )) dbapp.engine.execute(release_files.insert().values( name="test-project", version="1.0", filename="test-project-1.0.tar.gz", python_version="source", packagetype="sdist", md5_digest="0cc175b9c0f1b6a831c399e269772661", downloads=10, upload_time=datetime.datetime(year=2013, month=1, day=30), )) def os_exists(): yield # start yield True # whether download file exists yield pgp # whether .asc pgp file exists f = os_exists().send f(None) # start it off os_exists = pretend.call_recorder(f) monkeypatch.setattr(os.path, "exists", os_exists) monkeypatch.setattr(os.path, "getsize", lambda x: 10) dbapp.config.paths.packages = "fake" downloads = dbapp.models.packaging.get_downloads("test-project", "1.0") pgp_url = "/packages/source/t/test-project/test-project-1.0.tar.gz.asc" assert downloads == [ { "name": "test-project", "version": "1.0", "filename": "test-project-1.0.tar.gz", "filepath": "fake/source/t/test-project/test-project-1.0.tar.gz", "comment_text": None, "downloads": 10, "upload_time": datetime.datetime(year=2013, month=1, day=30), "python_version": "source", "md5_digest": "0cc175b9c0f1b6a831c399e269772661", "url": "/packages/source/t/test-project/test-project-1.0.tar.gz", "packagetype": "sdist", "size": 10, "pgp_url": pgp_url if pgp else None, }, ] assert os_exists.calls == [ pretend.call(downloads[0]["filepath"]), pretend.call(downloads[0]["filepath"] + ".asc") ]
def test_get_file_urls(name, values, urls, dbapp): # prepare db dbapp.engine.execute(packages.insert().values(name=name)) for value in values: dbapp.engine.execute(release_files.insert().values(name=name, **value)) assert dbapp.models.packaging.get_file_urls(name) == [{ "filename": f, "url": u } for f, u in sorted(set(urls), reverse=True)]
def test_get_downloads(pgp, dbapp, monkeypatch): dbapp.engine.execute(packages.insert().values(name="test-project")) dbapp.engine.execute(releases.insert().values( name="test-project", version="1.0", )) dbapp.engine.execute(release_files.insert().values( name="test-project", version="1.0", filename="test-project-1.0.tar.gz", python_version="source", packagetype="sdist", md5_digest="0cc175b9c0f1b6a831c399e269772661", downloads=10, upload_time=datetime.datetime(year=2013, month=1, day=30), )) def os_exists(): yield # start yield True # whether download file exists yield pgp # whether .asc pgp file exists f = os_exists().send f(None) # start it off os_exists = pretend.call_recorder(f) monkeypatch.setattr(os.path, "exists", os_exists) monkeypatch.setattr(os.path, "getsize", lambda x: 10) dbapp.config.paths.packages = "fake" downloads = dbapp.db.packaging.get_downloads("test-project", "1.0") pgp_url = "/packages/source/t/test-project/test-project-1.0.tar.gz.asc" assert downloads == [ { "name": "test-project", "version": "1.0", "filename": "test-project-1.0.tar.gz", "filepath": "fake/source/t/test-project/test-project-1.0.tar.gz", "comment_text": None, "downloads": 10, "upload_time": datetime.datetime(year=2013, month=1, day=30), "python_version": "source", "md5_digest": "0cc175b9c0f1b6a831c399e269772661", "url": "/packages/source/t/test-project/test-project-1.0.tar.gz", "packagetype": "sdist", "size": 10, "pgp_url": pgp_url if pgp else None, }, ] assert os_exists.calls == [ pretend.call(downloads[0]["filepath"]), pretend.call(downloads[0]["filepath"] + ".asc") ]
def test_top_projects(num, result, dbapp): # Insert some data into the database files = [ ('one', 10, 'one-1.0.zip'), ('one', 100, 'one-1.1.zip'), ('one', 1000, 'one-1.2.zip'), ('two', 2, 'two-1.0.zip'), ('two', 20, 'two-1.2.zip'), ('three', 10000, 'three-1.0.zip'), ] for name, downloads, filename in files: dbapp.engine.execute(release_files.insert().values(name=name, downloads=downloads, filename=filename)) top = dbapp.models.packaging.get_top_projects(num) assert top == result
def test_get_downloads_missing(dbapp, monkeypatch): dbapp.engine.execute(packages.insert().values(name="test-project")) dbapp.engine.execute(releases.insert().values( name="test-project", version="1.0", )) dbapp.engine.execute(release_files.insert().values( name="test-project", version="1.0", filename="test-project-1.0.tar.gz", python_version="source", packagetype="sdist", md5_digest="0cc175b9c0f1b6a831c399e269772661", downloads=10, upload_time=datetime.datetime(year=2013, month=1, day=30), )) # file does not exist os_exists = pretend.call_recorder(lambda p: False) # we match the specific arguments below - no need forcing them here as well log_error = pretend.call_recorder(lambda *a: None) monkeypatch.setattr(os.path, "exists", os_exists) # log from warehouse.packaging.models monkeypatch.setattr(log, "error", log_error) dbapp.config.paths.packages = "fake" downloads = dbapp.models.packaging.get_downloads("test-project", "1.0") assert downloads == [] filepath = "fake/source/t/test-project/test-project-1.0.tar.gz" assert os_exists.calls == [pretend.call(filepath)] # actual error message may vary, so just assert that the logging was called assert log_error.calls == [ pretend.call( "%s missing for package %s %s", filepath, "test-project", "1.0", ), ]
def test_get_downloads_missing(dbapp, monkeypatch): dbapp.engine.execute(packages.insert().values(name="test-project")) dbapp.engine.execute(releases.insert().values( name="test-project", version="1.0", )) dbapp.engine.execute(release_files.insert().values( name="test-project", version="1.0", filename="test-project-1.0.tar.gz", python_version="source", packagetype="sdist", md5_digest="0cc175b9c0f1b6a831c399e269772661", downloads=10, upload_time=datetime.datetime(year=2013, month=1, day=30), )) # file does not exist os_exists = pretend.call_recorder(lambda p: False) # we match the specific arguments below - no need forcing them here as well log_error = pretend.call_recorder(lambda *a: None) monkeypatch.setattr(os.path, "exists", os_exists) # log from warehouse.packaging.db monkeypatch.setattr(log, "error", log_error) dbapp.config.paths.packages = "fake" downloads = dbapp.db.packaging.get_downloads("test-project", "1.0") assert downloads == [] filepath = "fake/source/t/test-project/test-project-1.0.tar.gz" assert os_exists.calls == [pretend.call(filepath)] # actual error message may vary, so just assert that the logging was called assert log_error.calls == [ pretend.call( "%s missing for package %s %s", filepath, "test-project", "1.0", ), ]
def test_get_filename_md5(filename, md5, dbapp): # prepare database dbapp.engine.execute(release_files.insert().values(filename=filename, md5_digest=md5)) assert dbapp.models.packaging.get_filename_md5(filename) == md5
def test_get_project_for_filename(name, filename, dbapp): # prepare database dbapp.engine.execute(release_files.insert().values(name=name, filename=filename)) assert dbapp.models.packaging.get_project_for_filename(filename) == name