def test_blocking_dependencies_locators_fails(self): # Testing the work around for //bitbucket.org/pypa/distlib/issue/59/ . with mock.patch.object(distlib.locators, 'locate') as locate_mock: py3 = {'py3_project': ''} breaking_project = 'test_project' locate_mock.side_effect = AttributeError() got = dependencies.blocking_dependencies([breaking_project], py3)
def run_check(pk): """ The central job to run the check. Called after a check has been created. """ check = Check.objects.get(pk=pk) check.started_at = now() all_py3_projects = get_or_fetch_all_py3_projects() blockers = blocking_dependencies(check.projects, all_py3_projects) blockers_mapping = {} for blocker in sorted(blockers, key=lambda x: tuple(reversed(x))): blockers_mapping[blocker[0]] = blocker[1:] check.blockers = blockers_mapping flattened_blockers = set() for blocker_reasons in blockers: for blocker in blocker_reasons: flattened_blockers.add(blocker) check.unblocked = len(flattened_blockers) check.finished_at = now() check.save() Check.objects.filter(pk=check.pk).update(runs=F('runs') + 1) return blockers
def run_check(pk): """ The central job to run the check. Called after a check has been created. """ check = Check.objects.get(pk=pk) check.started_at = now() all_py3_projects = get_or_fetch_all_py3_projects() blockers = blocking_dependencies(check.projects, all_py3_projects) blockers_mapping = {} for blocker in sorted(blockers, key=lambda x: tuple(reversed(x))): blockers_mapping[blocker[0]] = blocker[1:] check.blockers = blockers_mapping flattened_blockers = set() for blocker_reasons in blockers: for blocker in blocker_reasons: flattened_blockers.add(blocker) check.unblocked = len(flattened_blockers) check.finished_at = now() check.save() Check.objects.filter(pk=check.pk).update(runs=F('runs') + 1) redis = get_redis() # the number of "publicly" announced checks is the sum of all runs # and the number of projects that have been created lazily public_checks = (Check.objects.filter(public=True).aggregate(Sum('runs'))) project_count = Project.objects.count() redis.set(CHECKED_COUNT_KEY, public_checks.get('runs__sum') or 0 + project_count) return blockers
def main(): logger = logging.getLogger("python_pa") py2_projects = caniusepython3.pypi.all_projects() py3_projects = caniusepython3.pypi.all_py3_projects() py2_only_projects = set(py2_projects).difference(set(py3_projects)) package_index = randint(0, len(py2_only_projects)) selected_package_name = list(py2_only_projects)[package_index] blockers = blocking_dependencies( [selected_package_name], py3_projects) print("Randomly Selected Package is {}".format(selected_package_name)) print(message(blockers)) print(pprint_blockers(blockers))
def check(projects): """Check the specified projects for Python 3 compatibility.""" log = logging.getLogger('ciu') log.info('{0} top-level projects to check'.format(len(projects))) print('Finding and checking dependencies ...') blockers = dependencies.blocking_dependencies(projects, pypi.all_py3_projects()) print('') for line in message(blockers): print(line) print('') for line in pprint_blockers(blockers): print(' ', line)
def check(projects): """Check the specified projects for Python 3 compatibility.""" # Without this, the 'ciu' logger will emit nothing. logging.basicConfig(format='[%(levelname)s] %(message)s') log = logging.getLogger('ciu') log.info('{0} top-level projects to check'.format(len(projects))) print('Finding and checking dependencies ...') blockers = dependencies.blocking_dependencies(projects, pypi.all_py3_projects()) print('') for line in message(blockers): print(line) print('') for line in pprint_blockers(blockers): print(' ', line)
def test_blocking_dependencies_no_project(self): got = dependencies.blocking_dependencies(['asdfsadfdsfsdffdfadf'], {}) self.assertEqual(got, frozenset())
def test_top_level_project_normalization(self): py3 = {'wsgi_intercept': ''} abnormal_name = 'WSGI-intercept' # Note dash instead of underscore. got = dependencies.blocking_dependencies([abnormal_name], py3) self.assertEqual(got, frozenset())
def test_blocking_dependencies(self): got = dependencies.blocking_dependencies(['pastescript'], {'paste': ''}) want = frozenset([('pastedeploy', 'pastescript')]) self.assertEqual(frozenset(got), want)
def test_recursion(self, dependencies_mock): deps = {'a': ['b'], 'b': ['a']} dependencies_mock.side_effect = lambda name: deps[name] got = dependencies.blocking_dependencies(['a'], {}) self.assertEqual(frozenset(), got)
def test_blocking_dependencies(self): got = dependencies.blocking_dependencies(['mozinfo'], {}) want = frozenset([('mozfile', 'mozinfo')]) self.assertEqual(frozenset(got), want)
def write_results(top_blockers): with open('top_blockers', 'wt') as out_file: pprint(top_blockers.most_common(), stream=out_file) if __name__ == "__main__": logger = logging.getLogger(__name__) all_py_projects = list(caniusepython3.pypi.all_projects()) py3_projects = caniusepython3.pypi.all_py3_projects() top_blockers = Counter() for py_projects_sublist in chunk_list(all_py_projects, 50): all_blockers = None try: all_blockers = blocking_dependencies( py_projects_sublist, py3_projects) blocker_list = [] for blockers_subset in all_blockers: for blocker in blockers_subset: blocker_list.append(blocker) top_blockers.update(blocker_list) except SyntaxError as error: logger.exception("{} throw on projects {}".format( error, py_projects_sublist)) except TypeError as error: logger.exception("{} throw on projects {}".format( error, py_projects_sublist))