From bfe51181ed579453a37aaa93a336e568d5f12e4c Mon Sep 17 00:00:00 2001 From: Olaf Alders Date: Sat, 10 Dec 2016 23:08:48 -0500 Subject: [PATCH 01/18] Add a MetaCPAN::Client example for getting all releases. --- scripts/release/7-all-releases-es.pl | 22 ++++++++++++++++++++++ scripts/release/7-all-releases.pl | 20 +++++--------------- 2 files changed, 27 insertions(+), 15 deletions(-) create mode 100755 scripts/release/7-all-releases-es.pl mode change 100755 => 100644 scripts/release/7-all-releases.pl diff --git a/scripts/release/7-all-releases-es.pl b/scripts/release/7-all-releases-es.pl new file mode 100755 index 0000000..688cfc3 --- /dev/null +++ b/scripts/release/7-all-releases-es.pl @@ -0,0 +1,22 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature qw( say ); + +use Data::Printer; +use MetaCPAN::Util qw( es ); + +my $scroller = es()->scroll_helper( + search_type => 'scan', + scroll => '5m', + index => 'cpan', + type => 'release', + size => 1_000, + body => { fields => ['download_url'] }, +); + +my @urls; +while ( my $result = $scroller->next ) { + push @urls, $result->{fields}->{download_url}; +} diff --git a/scripts/release/7-all-releases.pl b/scripts/release/7-all-releases.pl old mode 100755 new mode 100644 index 688cfc3..c00dbfd --- a/scripts/release/7-all-releases.pl +++ b/scripts/release/7-all-releases.pl @@ -1,22 +1,12 @@ -#!/usr/bin/env perl - use strict; use warnings; use feature qw( say ); -use Data::Printer; -use MetaCPAN::Util qw( es ); +use MetaCPAN::Client (); -my $scroller = es()->scroll_helper( - search_type => 'scan', - scroll => '5m', - index => 'cpan', - type => 'release', - size => 1_000, - body => { fields => ['download_url'] }, -); +my $mc = MetaCPAN::Client->new; +my $release_results = $mc->all('releases'); -my @urls; -while ( my $result = $scroller->next ) { - push @urls, $result->{fields}->{download_url}; +while ( my $release = $release_results->next ) { + say $release->download_url; } From e92ed5a44a98c6f94ec7212ad324288de3c30935 Mon Sep 17 00:00:00 2001 From: Olaf Alders Date: Sat, 10 Dec 2016 23:11:11 -0500 Subject: [PATCH 02/18] Rename an es script. --- scripts/release/7-all-releases.pl | 0 .../{all-releases-by-author.pl => all-releases-by-author-es.pl} | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/release/7-all-releases.pl rename scripts/release/{all-releases-by-author.pl => all-releases-by-author-es.pl} (100%) diff --git a/scripts/release/7-all-releases.pl b/scripts/release/7-all-releases.pl old mode 100644 new mode 100755 diff --git a/scripts/release/all-releases-by-author.pl b/scripts/release/all-releases-by-author-es.pl similarity index 100% rename from scripts/release/all-releases-by-author.pl rename to scripts/release/all-releases-by-author-es.pl From 78c12ec410c3499b078a74e5ea451b6cbe0c1ed9 Mon Sep 17 00:00:00 2001 From: Olaf Alders Date: Sat, 10 Dec 2016 23:12:00 -0500 Subject: [PATCH 03/18] Rename all releases by author script. --- ...ll-releases-by-author-es.pl => 8-all-releases-by-author-es.pl} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/release/{all-releases-by-author-es.pl => 8-all-releases-by-author-es.pl} (100%) diff --git a/scripts/release/all-releases-by-author-es.pl b/scripts/release/8-all-releases-by-author-es.pl similarity index 100% rename from scripts/release/all-releases-by-author-es.pl rename to scripts/release/8-all-releases-by-author-es.pl From 871587716328b017732c82a569b059313568cb48 Mon Sep 17 00:00:00 2001 From: Olaf Alders Date: Sat, 10 Dec 2016 23:28:34 -0500 Subject: [PATCH 04/18] Adds more release examples. --- scripts/release/10-all-latest-releases.pl | 12 +++++++++++ .../11-all-latest-releases-by-NEILB.pl | 14 +++++++++++++ ...t-releases-by-NEILB-with-git-repository.pl | 20 +++++++++++++++++++ .../9-all-releases-excluding-backpan.pl | 12 +++++++++++ 4 files changed, 58 insertions(+) create mode 100755 scripts/release/10-all-latest-releases.pl create mode 100755 scripts/release/11-all-latest-releases-by-NEILB.pl create mode 100755 scripts/release/12-all-latest-releases-by-NEILB-with-git-repository.pl create mode 100755 scripts/release/9-all-releases-excluding-backpan.pl diff --git a/scripts/release/10-all-latest-releases.pl b/scripts/release/10-all-latest-releases.pl new file mode 100755 index 0000000..db8334b --- /dev/null +++ b/scripts/release/10-all-latest-releases.pl @@ -0,0 +1,12 @@ +use strict; +use warnings; +use feature qw( say ); + +use MetaCPAN::Client (); + +my $mc = MetaCPAN::Client->new; +my $release_results = $mc->release( { status => 'latest' } ); + +while ( my $release = $release_results->next ) { + say $release->download_url; +} diff --git a/scripts/release/11-all-latest-releases-by-NEILB.pl b/scripts/release/11-all-latest-releases-by-NEILB.pl new file mode 100755 index 0000000..851663d --- /dev/null +++ b/scripts/release/11-all-latest-releases-by-NEILB.pl @@ -0,0 +1,14 @@ +use strict; +use warnings; +use feature qw( say ); + +use MetaCPAN::Client (); + +my $mc = MetaCPAN::Client->new; +my $release_results + = $mc->release( + { all => [ { author => 'NEILB', }, { status => 'latest' } ] } ); + +while ( my $release = $release_results->next ) { + say $release->download_url; +} diff --git a/scripts/release/12-all-latest-releases-by-NEILB-with-git-repository.pl b/scripts/release/12-all-latest-releases-by-NEILB-with-git-repository.pl new file mode 100755 index 0000000..79973f3 --- /dev/null +++ b/scripts/release/12-all-latest-releases-by-NEILB-with-git-repository.pl @@ -0,0 +1,20 @@ +use strict; +use warnings; +use feature qw( say ); + +use MetaCPAN::Client (); + +my $mc = MetaCPAN::Client->new; +my $release_results = $mc->release( + { + all => [ + { author => 'NEILB', }, + { status => 'latest' }, + { 'resources.repository.type' => 'git' } + ] + } +); + +while ( my $release = $release_results->next ) { + say $release->resources->{repository}->{url}; +} diff --git a/scripts/release/9-all-releases-excluding-backpan.pl b/scripts/release/9-all-releases-excluding-backpan.pl new file mode 100755 index 0000000..4418ae6 --- /dev/null +++ b/scripts/release/9-all-releases-excluding-backpan.pl @@ -0,0 +1,12 @@ +use strict; +use warnings; +use feature qw( say ); + +use MetaCPAN::Client (); + +my $mc = MetaCPAN::Client->new; +my $release_results = $mc->release( { not => { status => 'backpan' } } ); + +while ( my $release = $release_results->next ) { + say $release->download_url; +} From 391927beb9e416fa71bf3bbb2e599c30a7a6986b Mon Sep 17 00:00:00 2001 From: Mickey Nasriachi Date: Sun, 11 Dec 2016 10:50:56 +0100 Subject: [PATCH 05/18] load MetaCPAN::Util in example scripts --- scripts/author/1-fetch-single-author-es.pl | 10 +++------- scripts/author/1b-scroll-all-authors-es.pl | 1 + .../author/1c-scroll-all-authors-with-twitter-es.pl | 1 + scripts/author/2-twitter-or-github-es.pl | 1 + scripts/distribution/1-bugs-for-dist-es.pl | 1 + scripts/favorite/1-last-50-favorited-dists-es.pl | 1 + .../1a-last-100-favorited-dists-by-user-es.pl | 1 + scripts/favorite/2-favorites-previous-month-es.pl | 1 + scripts/favorite/3-leaderboard-es.pl | 1 + scripts/favorite/4-leaderboard-previous-month-es.pl | 1 + scripts/favorite/5-plus-plus-your-favorites-es.pl | 1 + scripts/favorite/6-list-plussers-by-module.pl | 1 + scripts/file/1-get-files-in-dist-es.pl | 1 + scripts/file/2-get-dists-with-cpanfile.pl | 1 + scripts/file/3-find-files-in-top-level-by-name.pl | 1 + scripts/file/4-main-search.pl | 1 + scripts/module/1-fetch-single-module-es.pl | 1 + scripts/release/1-pkg2url-es.pl | 11 +++-------- scripts/release/1a-module2url-es.pl | 11 ++++------- scripts/release/2-author-upload-leaderboard-es.pl | 2 ++ scripts/release/3-author-uploads-one-author-es.pl | 1 + scripts/release/4-latest-release-versions-es.pl | 2 ++ .../4a-latest-release-versions-bool-filter-es.pl | 1 + scripts/release/5-latest-releases-by-author-es.pl | 2 ++ scripts/release/6-latest-releases-with-git-repo-es.pl | 1 + scripts/release/7-all-releases-es.pl | 2 ++ scripts/release/8-all-releases-by-author-es.pl | 1 + 27 files changed, 38 insertions(+), 22 deletions(-) diff --git a/scripts/author/1-fetch-single-author-es.pl b/scripts/author/1-fetch-single-author-es.pl index 5d61d79..1fb7187 100755 --- a/scripts/author/1-fetch-single-author-es.pl +++ b/scripts/author/1-fetch-single-author-es.pl @@ -4,15 +4,11 @@ use warnings; use Data::Printer; -use Search::Elasticsearch; -my $es = Search::Elasticsearch->new( - cxn_pool => 'Static::NoPing', - nodes => 'fastapi.metacpan.org', - trace_to => 'Stdout', -); +use lib './lib'; +use MetaCPAN::Util qw( es ); -my $author = $es->get( +my $author = es->get( index => 'cpan', type => 'author', id => 'MSTROUT', diff --git a/scripts/author/1b-scroll-all-authors-es.pl b/scripts/author/1b-scroll-all-authors-es.pl index 85c23a0..b24b0a3 100755 --- a/scripts/author/1b-scroll-all-authors-es.pl +++ b/scripts/author/1b-scroll-all-authors-es.pl @@ -4,6 +4,7 @@ use warnings; use Data::Printer; +use lib './lib'; use MetaCPAN::Util qw( es ); my $scroller = es()->scroll_helper( diff --git a/scripts/author/1c-scroll-all-authors-with-twitter-es.pl b/scripts/author/1c-scroll-all-authors-with-twitter-es.pl index a9d1c69..1b1e0fe 100755 --- a/scripts/author/1c-scroll-all-authors-with-twitter-es.pl +++ b/scripts/author/1c-scroll-all-authors-with-twitter-es.pl @@ -4,6 +4,7 @@ use warnings; use Data::Printer; +use lib './lib'; use MetaCPAN::Util qw( es ); my $scroller = es()->scroll_helper( diff --git a/scripts/author/2-twitter-or-github-es.pl b/scripts/author/2-twitter-or-github-es.pl index 439a732..32b8837 100755 --- a/scripts/author/2-twitter-or-github-es.pl +++ b/scripts/author/2-twitter-or-github-es.pl @@ -4,6 +4,7 @@ use warnings; use feature qw( say ); +use lib './lib'; use MetaCPAN::Util qw( es ); my $scroller = es()->scroll_helper( diff --git a/scripts/distribution/1-bugs-for-dist-es.pl b/scripts/distribution/1-bugs-for-dist-es.pl index 9cb0ec9..631ad5b 100755 --- a/scripts/distribution/1-bugs-for-dist-es.pl +++ b/scripts/distribution/1-bugs-for-dist-es.pl @@ -4,6 +4,7 @@ use warnings; use Data::Printer; +use lib './lib'; use MetaCPAN::Util qw( es ); my $dist = es()->get( diff --git a/scripts/favorite/1-last-50-favorited-dists-es.pl b/scripts/favorite/1-last-50-favorited-dists-es.pl index 695eb78..5901d91 100755 --- a/scripts/favorite/1-last-50-favorited-dists-es.pl +++ b/scripts/favorite/1-last-50-favorited-dists-es.pl @@ -4,6 +4,7 @@ use warnings; use Data::Printer; +use lib './lib'; use MetaCPAN::Util qw( es ); my $faves = es()->search( diff --git a/scripts/favorite/1a-last-100-favorited-dists-by-user-es.pl b/scripts/favorite/1a-last-100-favorited-dists-by-user-es.pl index 2d7904a..608935b 100755 --- a/scripts/favorite/1a-last-100-favorited-dists-by-user-es.pl +++ b/scripts/favorite/1a-last-100-favorited-dists-by-user-es.pl @@ -4,6 +4,7 @@ use warnings; use Data::Printer; +use lib './lib'; use MetaCPAN::Util qw( es ); my $id = shift @ARGV; diff --git a/scripts/favorite/2-favorites-previous-month-es.pl b/scripts/favorite/2-favorites-previous-month-es.pl index ca45c40..252760f 100755 --- a/scripts/favorite/2-favorites-previous-month-es.pl +++ b/scripts/favorite/2-favorites-previous-month-es.pl @@ -5,6 +5,7 @@ use Data::Printer; use DateTime; +use lib './lib'; use MetaCPAN::Util qw( es ); my $now = DateTime->now; diff --git a/scripts/favorite/3-leaderboard-es.pl b/scripts/favorite/3-leaderboard-es.pl index a6b33b8..2b68b35 100755 --- a/scripts/favorite/3-leaderboard-es.pl +++ b/scripts/favorite/3-leaderboard-es.pl @@ -4,6 +4,7 @@ use warnings; use Data::Printer; +use lib './lib'; use MetaCPAN::Util qw( es ); my $faves = es()->search( diff --git a/scripts/favorite/4-leaderboard-previous-month-es.pl b/scripts/favorite/4-leaderboard-previous-month-es.pl index d38e9a5..d516095 100755 --- a/scripts/favorite/4-leaderboard-previous-month-es.pl +++ b/scripts/favorite/4-leaderboard-previous-month-es.pl @@ -5,6 +5,7 @@ use Data::Printer; use DateTime; +use lib './lib'; use MetaCPAN::Util qw( es ); my $now = DateTime->now; diff --git a/scripts/favorite/5-plus-plus-your-favorites-es.pl b/scripts/favorite/5-plus-plus-your-favorites-es.pl index 26ee015..f611fa8 100755 --- a/scripts/favorite/5-plus-plus-your-favorites-es.pl +++ b/scripts/favorite/5-plus-plus-your-favorites-es.pl @@ -6,6 +6,7 @@ use Data::Printer; use HTTP::Tiny (); use JSON::MaybeXS qw( encode_json ); +use lib './lib'; use MetaCPAN::Util qw( es ); my $token = shift @ARGV; diff --git a/scripts/favorite/6-list-plussers-by-module.pl b/scripts/favorite/6-list-plussers-by-module.pl index c30b9d5..49a4127 100755 --- a/scripts/favorite/6-list-plussers-by-module.pl +++ b/scripts/favorite/6-list-plussers-by-module.pl @@ -5,6 +5,7 @@ use feature qw( say ); use MetaCPAN::Client; +use lib './lib'; use MetaCPAN::Util qw( es ); binmode( STDOUT, ":utf8" ); diff --git a/scripts/file/1-get-files-in-dist-es.pl b/scripts/file/1-get-files-in-dist-es.pl index 30d5431..f80f37d 100755 --- a/scripts/file/1-get-files-in-dist-es.pl +++ b/scripts/file/1-get-files-in-dist-es.pl @@ -5,6 +5,7 @@ use feature qw( say ); use Data::Printer; +use lib './lib'; use MetaCPAN::Util qw( es ); my $files = es()->search( diff --git a/scripts/file/2-get-dists-with-cpanfile.pl b/scripts/file/2-get-dists-with-cpanfile.pl index 5f6d7d6..224837e 100755 --- a/scripts/file/2-get-dists-with-cpanfile.pl +++ b/scripts/file/2-get-dists-with-cpanfile.pl @@ -5,6 +5,7 @@ use feature qw( say ); use Data::Printer; +use lib './lib'; use MetaCPAN::Util qw( es ); my $files = es()->search( diff --git a/scripts/file/3-find-files-in-top-level-by-name.pl b/scripts/file/3-find-files-in-top-level-by-name.pl index 48d9b85..aeafec4 100755 --- a/scripts/file/3-find-files-in-top-level-by-name.pl +++ b/scripts/file/3-find-files-in-top-level-by-name.pl @@ -5,6 +5,7 @@ use feature qw( say ); use Data::Printer; +use lib './lib'; use MetaCPAN::Util qw( es ); my $files = es()->search( diff --git a/scripts/file/4-main-search.pl b/scripts/file/4-main-search.pl index 80f8905..40f8c0d 100755 --- a/scripts/file/4-main-search.pl +++ b/scripts/file/4-main-search.pl @@ -5,6 +5,7 @@ use Data::Printer; use JSON::MaybeXS qw( decode_json ); +use lib './lib'; use MetaCPAN::Util qw( es ); my $search_term = shift @ARGV || 'HTML-Re'; diff --git a/scripts/module/1-fetch-single-module-es.pl b/scripts/module/1-fetch-single-module-es.pl index 633ccbe..6698c11 100755 --- a/scripts/module/1-fetch-single-module-es.pl +++ b/scripts/module/1-fetch-single-module-es.pl @@ -4,6 +4,7 @@ use warnings; use Data::Printer; +use lib './lib'; use MetaCPAN::Util qw( es ); my $module = es()->get( diff --git a/scripts/release/1-pkg2url-es.pl b/scripts/release/1-pkg2url-es.pl index f649693..9d5f94a 100755 --- a/scripts/release/1-pkg2url-es.pl +++ b/scripts/release/1-pkg2url-es.pl @@ -4,15 +4,10 @@ use warnings; use feature qw( say ); -use Search::Elasticsearch; +use lib './lib'; +use MetaCPAN::Util qw( es ); -my $es = Search::Elasticsearch->new( - cxn_pool => 'Static::NoPing', - nodes => 'https://fastapi.metacpan.org/', - trace_to => 'Stdout', -); - -my $release = $es->search( +my $release = es->search( index => 'cpan', type => 'release', body => { diff --git a/scripts/release/1a-module2url-es.pl b/scripts/release/1a-module2url-es.pl index 9767f0b..9ffd498 100755 --- a/scripts/release/1a-module2url-es.pl +++ b/scripts/release/1a-module2url-es.pl @@ -6,13 +6,10 @@ use Search::Elasticsearch; -my $es = Search::Elasticsearch->new( - cxn_pool => 'Static::NoPing', - nodes => 'https://fastapi.metacpan.org/', - trace_to => 'Stdout', -); +use lib './lib'; +use MetaCPAN::Util qw( es ); -my $module = $es->search( +my $module = es->search( index => 'cpan', type => 'file', body => { @@ -29,7 +26,7 @@ my $release_name = $module->{hits}{hits}[0]{_source}{release}; -my $release = $es->search( +my $release = es->search( index => 'cpan', type => 'release', body => { diff --git a/scripts/release/2-author-upload-leaderboard-es.pl b/scripts/release/2-author-upload-leaderboard-es.pl index 4f538eb..c71bd65 100755 --- a/scripts/release/2-author-upload-leaderboard-es.pl +++ b/scripts/release/2-author-upload-leaderboard-es.pl @@ -4,6 +4,8 @@ use warnings; use Data::Printer; + +use lib './lib'; use MetaCPAN::Util qw( es ); my $uploads = es()->search( diff --git a/scripts/release/3-author-uploads-one-author-es.pl b/scripts/release/3-author-uploads-one-author-es.pl index a7c93eb..062a860 100755 --- a/scripts/release/3-author-uploads-one-author-es.pl +++ b/scripts/release/3-author-uploads-one-author-es.pl @@ -4,6 +4,7 @@ use warnings; use feature qw( say ); +use lib './lib'; use MetaCPAN::Util qw( es ); my $uploads = es()->search( diff --git a/scripts/release/4-latest-release-versions-es.pl b/scripts/release/4-latest-release-versions-es.pl index 67d74df..a53d8b1 100755 --- a/scripts/release/4-latest-release-versions-es.pl +++ b/scripts/release/4-latest-release-versions-es.pl @@ -4,6 +4,8 @@ use warnings; use Data::Printer; + +use lib './lib'; use MetaCPAN::Util qw( es ); my $latest = es()->search( diff --git a/scripts/release/4a-latest-release-versions-bool-filter-es.pl b/scripts/release/4a-latest-release-versions-bool-filter-es.pl index 6fef45d..a5c0a09 100755 --- a/scripts/release/4a-latest-release-versions-bool-filter-es.pl +++ b/scripts/release/4a-latest-release-versions-bool-filter-es.pl @@ -4,6 +4,7 @@ use warnings; use Data::Printer; +use lib './lib'; use MetaCPAN::Util qw( es ); my $latest = es()->search( diff --git a/scripts/release/5-latest-releases-by-author-es.pl b/scripts/release/5-latest-releases-by-author-es.pl index e9d7916..9f6dbff 100755 --- a/scripts/release/5-latest-releases-by-author-es.pl +++ b/scripts/release/5-latest-releases-by-author-es.pl @@ -4,6 +4,8 @@ use warnings; use Data::Printer; + +use lib './lib'; use MetaCPAN::Util qw( es ); my $author = shift @ARGV; diff --git a/scripts/release/6-latest-releases-with-git-repo-es.pl b/scripts/release/6-latest-releases-with-git-repo-es.pl index 63638ed..34cbd2c 100755 --- a/scripts/release/6-latest-releases-with-git-repo-es.pl +++ b/scripts/release/6-latest-releases-with-git-repo-es.pl @@ -5,6 +5,7 @@ use feature qw( say ); use Data::Printer; +use lib './lib'; use MetaCPAN::Util qw( es ); my @must = ( diff --git a/scripts/release/7-all-releases-es.pl b/scripts/release/7-all-releases-es.pl index 688cfc3..80ecb56 100755 --- a/scripts/release/7-all-releases-es.pl +++ b/scripts/release/7-all-releases-es.pl @@ -5,6 +5,8 @@ use feature qw( say ); use Data::Printer; + +use lib './lib'; use MetaCPAN::Util qw( es ); my $scroller = es()->scroll_helper( diff --git a/scripts/release/8-all-releases-by-author-es.pl b/scripts/release/8-all-releases-by-author-es.pl index 32a5e42..ede3d9a 100755 --- a/scripts/release/8-all-releases-by-author-es.pl +++ b/scripts/release/8-all-releases-by-author-es.pl @@ -4,6 +4,7 @@ use warnings; use feature qw( say ); +use lib './lib'; use MetaCPAN::Util qw( es ); my $uploads = es()->search( From 357f3d1d7499e0432bfbbfb6bb0d91302009ad48 Mon Sep 17 00:00:00 2001 From: Mickey Nasriachi Date: Sun, 4 Jun 2017 18:11:41 +0200 Subject: [PATCH 06/18] update scroller_helper/query --- scripts/release/6-latest-releases-with-git-repo-es.pl | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/release/6-latest-releases-with-git-repo-es.pl b/scripts/release/6-latest-releases-with-git-repo-es.pl index 34cbd2c..42b7bea 100755 --- a/scripts/release/6-latest-releases-with-git-repo-es.pl +++ b/scripts/release/6-latest-releases-with-git-repo-es.pl @@ -17,12 +17,10 @@ my $scroller = es()->scroll_helper( body => { query => { - filtered => { - filter => { bool => { must => \@must } }, - }, + bool => { must => \@must }, }, }, - fields => [ 'author', 'date', 'distribution', 'name', 'resources' ], + _source => [ 'author', 'date', 'distribution', 'name', 'resources' ], search_type => 'scan', scroll => '5m', index => 'cpan', From b2c3e9dbd8441b0bbbabedb38fca3dcc5aa1c927 Mon Sep 17 00:00:00 2001 From: Olaf Alders Date: Fri, 23 Feb 2018 13:47:49 -0500 Subject: [PATCH 07/18] Add a script to aggregate author upload permissions --- scripts/permission/aggregate-author-perms.pl | 82 ++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 scripts/permission/aggregate-author-perms.pl diff --git a/scripts/permission/aggregate-author-perms.pl b/scripts/permission/aggregate-author-perms.pl new file mode 100644 index 0000000..767a8e9 --- /dev/null +++ b/scripts/permission/aggregate-author-perms.pl @@ -0,0 +1,82 @@ +use strict; +use warnings; +use feature qw( say ); + +use CLDR::Number (); +use Cpanel::JSON::XS qw( decode_json ); +use Data::Printer; +use List::Compare (); +use Math::Round qw( nearest ); +use Parse::CPAN::Packages::Fast (); +use WWW::Mechanize::Cached (); + +use CLDR::Number; +my $cldr = CLDR::Number->new( locale => 'en' ); +my $decf = $cldr->decimal_formatter; +my $perf = $cldr->percent_formatter(minimum_fraction_digits => 2); + +my @maxmind_authors = ( + 'OALDERS', 'EILARA', 'TJMATHER', 'MATEU', 'OSCHWALD', 'RSRCHBOY', + 'FLORA', 'MARKF', 'RUBEN', 'WDS', 'KLPTWO', 'PCRONIN', + 'ANDYJACK', 'MAXMIND', +); +my @maxmind_redacted_authors = ( + 'OALDERS', 'EILARA', 'TJMATHER', 'MATEU', 'OSCHWALD', 'RSRCHBOY', + 'MARKF', 'RUBEN', 'WDS', 'KLPTWO', 'PCRONIN', + 'ANDYJACK', +); +my @pts_authors = ( + 'ABELJTE', 'ANDK', 'ARC', 'ARISTOTLE', 'ATOOMIC', 'BINGOS', 'BOOK', + 'ELBEHO', 'ELIZABETH', 'ETHER', 'GARU', 'HAARG', 'HMBRAND', 'INGY', + 'ISHIGAKI', 'JBERGER', 'LEEJO', 'LEONT', 'LLAP', 'MICKEY', + 'MITHALDU', 'MOHAWK', 'NEILB', 'NINE', 'OALDERS', 'PJCJ', + 'PREACTION', 'SARGIE', 'SKAJI', 'SREZIC', 'TADZIK', 'TINITA', + 'TODDR', 'UGEXE', 'WOLFSAGE', 'XSAWYERX', +); + +my $parser = Parse::CPAN::Packages::Fast->new('02packages.details.txt'); +crunch_numbers( 'MM+PTS', [ @maxmind_authors, @pts_authors ] ); +crunch_numbers( 'PTS', \@pts_authors ); +crunch_numbers( 'DROLSKY', ['DROLSKY'] ); +crunch_numbers( 'MM', \@maxmind_authors ); +crunch_numbers( 'ETHER+FLORA', [ 'ETHER', 'FLORA' ] ); +crunch_numbers( 'ETHER', ['ETHER'] ); +crunch_numbers( 'FLORA', ['FLORA'] ); +crunch_numbers( 'MM-FLORA', \@maxmind_redacted_authors ); +crunch_numbers( 'OALDERS', ['OALDERS'] ); + +sub crunch_numbers { + my $title = shift; + my $authors = shift; + my %perms = get_permissions($authors); + my $lc = List::Compare->new( [ $parser->packages ], [ keys %perms ] ); + my @covered = $lc->get_intersection; + + my $percent = nearest( + 0.0001, + scalar @covered / ( scalar $parser->packages ) + ); + + say join '|', $title, $decf->format( scalar keys %perms ), + $decf->format( scalar @covered ), $perf->format($percent); +} + +sub get_permissions { + my $authors = shift; + my $mech = WWW::Mechanize::Cached->new; + + my %modules; + + my $base_url = 'http://fastapi.metacpan.org/v1/permission/by_author'; + foreach my $author ( @{$authors} ) { + my $url = "$base_url/$author"; + $mech->get($url); + my $perms = decode_json( $mech->content ); + + foreach my $perm ( @{ $perms->{permissions} } ) { + push @{ $modules{ $perm->{module_name} } }, $author; + } + } + + return %modules; +} From 8de991db8038d43115c6b48cb70206d07f414bbd Mon Sep 17 00:00:00 2001 From: Olaf Alders Date: Fri, 23 Feb 2018 13:48:16 -0500 Subject: [PATCH 08/18] Add script to get all releases in last 24 hours --- .../13-all-releases-in-last-24-hours.pl | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 scripts/release/13-all-releases-in-last-24-hours.pl diff --git a/scripts/release/13-all-releases-in-last-24-hours.pl b/scripts/release/13-all-releases-in-last-24-hours.pl new file mode 100644 index 0000000..7792f11 --- /dev/null +++ b/scripts/release/13-all-releases-in-last-24-hours.pl @@ -0,0 +1,24 @@ +use strict; +use warnings; +use feature qw( say ); + +use DateTime (); +use MetaCPAN::Client (); + +my $now = DateTime->now; +my $then = DateTime->now->subtract( days => 1 ); + +my $mc = MetaCPAN::Client->new; + +my $release_set = $mc->all( + 'releases', + { + es_filter => { + range => { date => { from => $then->datetime } }, + }, + } +); + +while ( my $release = $release_set->next ) { + say $release->download_url; +} From efe4c1242f11917500bab7c3f36f14624e3ea8d5 Mon Sep 17 00:00:00 2001 From: Olaf Alders Date: Wed, 6 Feb 2019 13:19:09 -0500 Subject: [PATCH 09/18] Update permissions aggregator to use PTS groups --- .gitignore | 5 +- scripts/permission/aggregate-author-perms.pl | 148 +++++++++++++++---- 2 files changed, 125 insertions(+), 28 deletions(-) mode change 100644 => 100755 scripts/permission/aggregate-author-perms.pl diff --git a/.gitignore b/.gitignore index 521ef88..6a014ae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ -*.swp +02packages.details.txt .carton -.tidyall.d/ cpanfile.snapshot local +*.swp +.tidyall.d/ diff --git a/scripts/permission/aggregate-author-perms.pl b/scripts/permission/aggregate-author-perms.pl old mode 100644 new mode 100755 index 767a8e9..e8decbb --- a/scripts/permission/aggregate-author-perms.pl +++ b/scripts/permission/aggregate-author-perms.pl @@ -1,3 +1,5 @@ +#!/usr/bin/env perl + use strict; use warnings; use feature qw( say ); @@ -5,15 +7,15 @@ use CLDR::Number (); use Cpanel::JSON::XS qw( decode_json ); use Data::Printer; -use List::Compare (); +use List::Compare (); +use LWP::UserAgent (); use Math::Round qw( nearest ); use Parse::CPAN::Packages::Fast (); use WWW::Mechanize::Cached (); -use CLDR::Number; my $cldr = CLDR::Number->new( locale => 'en' ); my $decf = $cldr->decimal_formatter; -my $perf = $cldr->percent_formatter(minimum_fraction_digits => 2); +my $perf = $cldr->percent_formatter( minimum_fraction_digits => 2 ); my @maxmind_authors = ( 'OALDERS', 'EILARA', 'TJMATHER', 'MATEU', 'OSCHWALD', 'RSRCHBOY', @@ -22,40 +24,134 @@ ); my @maxmind_redacted_authors = ( 'OALDERS', 'EILARA', 'TJMATHER', 'MATEU', 'OSCHWALD', 'RSRCHBOY', - 'MARKF', 'RUBEN', 'WDS', 'KLPTWO', 'PCRONIN', - 'ANDYJACK', + 'MARKF', 'RUBEN', 'WDS', 'KLPTWO', 'PCRONIN', 'ANDYJACK', ); -my @pts_authors = ( - 'ABELJTE', 'ANDK', 'ARC', 'ARISTOTLE', 'ATOOMIC', 'BINGOS', 'BOOK', - 'ELBEHO', 'ELIZABETH', 'ETHER', 'GARU', 'HAARG', 'HMBRAND', 'INGY', - 'ISHIGAKI', 'JBERGER', 'LEEJO', 'LEONT', 'LLAP', 'MICKEY', - 'MITHALDU', 'MOHAWK', 'NEILB', 'NINE', 'OALDERS', 'PJCJ', - 'PREACTION', 'SARGIE', 'SKAJI', 'SREZIC', 'TADZIK', 'TINITA', - 'TODDR', 'UGEXE', 'WOLFSAGE', 'XSAWYERX', + +my %PTS = ( + 'qa2010' => [ + 'CHORNY', 'HMBRAND', 'RURBAN', 'MARCEL', + 'BOOK', 'BDFOY', 'ANDYA', 'POTYL', + 'DAXIM', 'ABELTJE', 'OVID', 'HORNBURG', + 'DOMM', 'MIYAGAWA', 'PJCJ', 'BARBIE', + 'FLORA', 'RJBS', 'JKUTEJ', 'SREZIC', + 'MSCHWERN', 'SZABGAB', 'RGIERSIG', 'SQUEEK', + 'PEPL' + ], + 'qa2011' => [ + 'RGE', 'HMBRAND', 'MARCEL', 'SCHWIGON', + 'LEONT', 'BOOK', 'BDFOY', 'ANDYA', + 'AVAR', 'POTYL', 'DAXIM', 'ABELTJE', + 'SMUELLER', 'OVID', 'DOLMEN', 'WESJDJ', + 'SAPER', 'ADAMK', 'PJCJ', 'FLORA', + 'ABIGAIL', 'RJBS', 'PERLER', 'DGL', + 'JKUTEJ', 'WONKO', 'ADIE', 'BURAK' + ], + 'qa2012' => [ + 'XAV', 'HMBRAND', 'CHESSKIT', 'NPEREZ', + 'RGARCIA', 'ELIZABETH', 'DAGOLDEN', 'SCHWIGON', + 'LEONT', 'BOOK', 'BDFOY', 'ANDYA', + 'HAGGAI', 'GETTY', 'DAXIM', 'DDUMONT', + 'ABELTJE', 'OVID', 'ELBEHO', 'WOLFSAGE', + 'DOLMEN', 'WESJDJ', 'PAUAMMA', 'SAPER', + 'OALDERS', 'MIYAGAWA', 'PJCJ', 'BARBIE', + 'FLORA', 'VPIT', 'RJBS', 'DGL', + 'ISHIGAKI', 'WONKO', 'SREZIC', 'MSCHWERN', + 'GARU', 'RIBASUSHI', 'ADIE', 'APEIRON', + 'ANDK' + ], + 'qa2013' => [ + 'PERRETTDL', 'SJN', 'TBSLIVER', 'JROBINSON', + 'MITHALDU', 'HMBRAND', 'ELIZABETH', 'DAGOLDEN', + 'SCHWIGON', 'JKEENAN', 'LEONT', 'BOOK', + 'BANNAN', 'ANDYA', 'DREBOLO', 'PDCAWLEY', + 'GETTY', 'BINGOS', 'ABELTJE', 'REHSACK', + 'BYTEROCK', 'WOLFSAGE', 'DOLMEN', 'BBUSS', + 'PJCJ', 'BARBIE', 'ARC', 'RJBS', + 'DGL', 'ISHIGAKI', 'RIBASUSHI', 'JMASTROS', + 'ANDK', 'NEWELLC' + ], + 'qa2014' => [ + 'SJN', 'ETHER', 'MITHALDU', 'HMBRAND', + 'ELIZABETH', 'DAGOLDEN', 'SCHWIGON', 'LEONT', + 'BOOK', 'DAMS', 'MSTROUT', 'ABELTJE', + 'TIMB', 'FROGGS', 'OVID', 'REHSACK', + 'ELBEHO', 'WOLFSAGE', 'DOLMEN', 'SAPER', + 'OALDERS', 'PJCJ', 'BARBIE', 'RJBS', + 'ISHIGAKI', 'NEILB', 'SREZIC', 'RIBASUSHI', + 'HAARG', 'ANDK' + ], + 'qa2015' => [ + 'SJN', 'ETHER', 'MITHALDU', 'HMBRAND', + 'ELIZABETH', 'DAGOLDEN', 'SCHWIGON', 'LEONT', + 'EXODIST', 'BOOK', 'TADZIK', 'TINITA', + 'ABELTJE', 'INGY', 'FROGGS', 'REHSACK', + 'WOLFSAGE', 'DOLMEN', 'OALDERS', 'WOLLMERS', + 'MIYAGAWA', 'PJCJ', 'BARBIE', 'BARTOLIN', + 'RJBS', 'ISHIGAKI', 'NEILB', 'SREZIC', + 'DRTECH', 'RIBASUSHI', 'LICHTKIND', 'ARISTOTLE', + 'ANDK', 'NINE' + ], + 'qa2016' => [ + 'ETHER', 'HMBRAND', 'LLAP', 'ELIZABETH', + 'SCHWIGON', 'JKEENAN', 'LEONT', 'EXODIST', + 'BOOK', 'TADZIK', 'MICKEY', 'BINGOS', + 'ABELTJE', 'TIMB', 'JBERGER', 'WOLFSAGE', + 'DOLMEN', 'OALDERS', 'PJCJ', 'BARBIE', + 'ARC', 'RJBS', 'ISHIGAKI', 'XSAWYERX', + 'NEILB', 'SREZIC', 'ARISTOTLE', 'SARGIE', + 'ANDK' + ], + 'qa2017' => [ + 'ETHER', 'MITHALDU', 'HMBRAND', 'LEEJO', + 'LLAP', 'SKAJI', 'ELIZABETH', 'LEONT', + 'UGEXE', 'BOOK', 'TODDR', 'PREACTION', + 'TADZIK', 'MICKEY', 'BINGOS', 'TINITA', + 'ABELTJE', 'INGY', 'JBERGER', 'ELBEHO', + 'WOLFSAGE', 'OALDERS', 'MIYAGAWA', 'PJCJ', + 'ARC', 'ETJ', 'ISHIGAKI', 'XSAWYERX', + 'NEILB', 'SREZIC', 'GARU', 'ATOOMIC', + 'ARISTOTLE', 'HAARG', 'ANDK', 'NINE' + ], ); +my $ua = LWP::UserAgent->new; +$ua->mirror( 'https://cpan.metacpan.org/modules/02packages.details.txt', + '02packages.details.txt' ); + my $parser = Parse::CPAN::Packages::Fast->new('02packages.details.txt'); -crunch_numbers( 'MM+PTS', [ @maxmind_authors, @pts_authors ] ); -crunch_numbers( 'PTS', \@pts_authors ); -crunch_numbers( 'DROLSKY', ['DROLSKY'] ); -crunch_numbers( 'MM', \@maxmind_authors ); -crunch_numbers( 'ETHER+FLORA', [ 'ETHER', 'FLORA' ] ); -crunch_numbers( 'ETHER', ['ETHER'] ); -crunch_numbers( 'FLORA', ['FLORA'] ); -crunch_numbers( 'MM-FLORA', \@maxmind_redacted_authors ); -crunch_numbers( 'OALDERS', ['OALDERS'] ); + +say join '|', + ( + q{}, + q{}, + 'Modules with maint', + 'Modules in 02packages', + '% of modules in 02packages', + ); +say join '---', ( ('|') x 5 ); + +for my $author ( sort @{$PTS{qa2017}} ) { + crunch_numbers( $author, [$author]); +} + +for my $group_name ( sort keys %PTS ) { + crunch_numbers( $group_name, $PTS{$group_name} ); +} sub crunch_numbers { my $title = shift; my $authors = shift; - my %perms = get_permissions($authors); + + # The modules which these authors have release permissions on. + my %perms = get_permissions($authors); + my $lc = List::Compare->new( [ $parser->packages ], [ keys %perms ] ); + + # The permissioned modules which actually appear in 02packages. my @covered = $lc->get_intersection; - my $percent = nearest( - 0.0001, - scalar @covered / ( scalar $parser->packages ) - ); + my $percent + = nearest( 0.0001, scalar @covered / ( scalar $parser->packages ) ); say join '|', $title, $decf->format( scalar keys %perms ), $decf->format( scalar @covered ), $perf->format($percent); From 9ed5824cfea80cca1c730bd43d251517c0d72386 Mon Sep 17 00:00:00 2001 From: Olaf Alders Date: Thu, 23 May 2019 01:08:11 -0400 Subject: [PATCH 10/18] Add example to find all author Twitter accounts --- scripts/author/twitter.pl | 46 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100755 scripts/author/twitter.pl diff --git a/scripts/author/twitter.pl b/scripts/author/twitter.pl new file mode 100755 index 0000000..c6a6508 --- /dev/null +++ b/scripts/author/twitter.pl @@ -0,0 +1,46 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature qw( say ); + +use MetaCPAN::Client; + +my $mc = MetaCPAN::Client->new( version => 'v1' ); + +# Search for authors with a listed Twitter account +my $search = $mc->author( { 'profile.name' => 'twitter' } ); + +my @handles; +while ( my $author = $search->next ) { + + # grep matching author profiles to extract only the Twitter id + my @profiles = grep { $_->{name} eq 'twitter' } @{ $author->profile }; + + foreach my $profile (@profiles) { + my $id = $profile->{id}; + + # not every handle returned by the API is prefixed by "@", so + # we'll add it when it's missing + $id = '@' . $id unless $id =~ m{\A@}; + push @handles, $id; + } +} + +# print a case-insensitive alpha-sorted list for humans to enjoy +say $_ for sort { "\L$a" cmp "\L$b" } @handles; + +=pod + +=head1 SYNOPSIS + +To create your own Twitter list of CPAN authors install and configure +L + +Then run: + + t list create cpan-authors + perl scripts/author/twitter.pl | xargs t list add cpan-authors + t list cpan-authors members + +=cut From 8b48ccbe1a8cdc7d015c9b6581c20b8aa55ab60f Mon Sep 17 00:00:00 2001 From: Zakariyya Mughal Date: Sun, 26 Sep 2021 02:44:48 -0400 Subject: [PATCH 11/18] Update a couple favorite scripts for current API --- scripts/favorite/1a-last-100-favorited-dists-by-user-es.pl | 2 +- scripts/favorite/4-leaderboard-previous-month-es.pl | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/favorite/1a-last-100-favorited-dists-by-user-es.pl b/scripts/favorite/1a-last-100-favorited-dists-by-user-es.pl index 608935b..41ed3cc 100755 --- a/scripts/favorite/1a-last-100-favorited-dists-by-user-es.pl +++ b/scripts/favorite/1a-last-100-favorited-dists-by-user-es.pl @@ -18,7 +18,7 @@ query => { filtered => { query => { match_all => {} }, - filter => { term => { 'favorite.user' => $id } } + filter => { term => { 'user' => $id } } }, }, sort => [ { date => 'desc' } ], diff --git a/scripts/favorite/4-leaderboard-previous-month-es.pl b/scripts/favorite/4-leaderboard-previous-month-es.pl index d516095..f8e1cc5 100755 --- a/scripts/favorite/4-leaderboard-previous-month-es.pl +++ b/scripts/favorite/4-leaderboard-previous-month-es.pl @@ -8,7 +8,7 @@ use lib './lib'; use MetaCPAN::Util qw( es ); -my $now = DateTime->now; +my $now = DateTime->now; my $then = $now->clone->subtract( months => 1 ); my $faves = es()->search( @@ -34,6 +34,6 @@ size => 0, ); -my @dists = map { $_->{terms} } $faves->{facets}->{dist}; +my @dists = @{ $faves->{aggregations}{dist}{buckets} }; p @dists; From 2338c0d89db5646601bdaeb539a58ee3b7b5b8fe Mon Sep 17 00:00:00 2001 From: Zakariyya Mughal Date: Sun, 10 Jul 2022 07:20:51 -0400 Subject: [PATCH 12/18] Use 2.x Elasticsearch client --- cpanfile | 3 +++ lib/MetaCPAN/Util.pm | 1 + 2 files changed, 4 insertions(+) diff --git a/cpanfile b/cpanfile index 3753f1b..8d18c66 100644 --- a/cpanfile +++ b/cpanfile @@ -8,6 +8,9 @@ requires 'IO::Socket::SSL'; requires 'JSON::MaybeXS'; requires 'MetaCPAN::API::Tiny'; requires 'MetaCPAN::Client', '>= 2.000000'; +requires 'Search::Elasticsearch'; +requires 'Search::Elasticsearch::Client::2_0::Direct'; +requires 'Sub::Exporter'; requires 'WWW::Mechanize::Cached'; requires 'WWW::Mechanize::Cached::GZip'; diff --git a/lib/MetaCPAN/Util.pm b/lib/MetaCPAN/Util.pm index b140451..58983e4 100644 --- a/lib/MetaCPAN/Util.pm +++ b/lib/MetaCPAN/Util.pm @@ -8,6 +8,7 @@ use Sub::Exporter -setup => { exports => ['es'] }; sub es { return Search::Elasticsearch->new( + client => '2_0::Direct', cxn_pool => 'Static::NoPing', nodes => 'https://fastapi.metacpan.org/v1', send_get_body_as => 'POST', From e38287a50ced066e66bd9e05f841099c3e5ad2da Mon Sep 17 00:00:00 2001 From: Zakariyya Mughal Date: Sun, 10 Jul 2022 07:25:53 -0400 Subject: [PATCH 13/18] Update API endpoint to POST favorite --- scripts/favorite/5-plus-plus-your-favorites-es.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/favorite/5-plus-plus-your-favorites-es.pl b/scripts/favorite/5-plus-plus-your-favorites-es.pl index f611fa8..1ae1e10 100755 --- a/scripts/favorite/5-plus-plus-your-favorites-es.pl +++ b/scripts/favorite/5-plus-plus-your-favorites-es.pl @@ -69,7 +69,7 @@ sub plus_plus { my $params = shift; my $ua = HTTP::Tiny->new; my $res = $ua->post( - "https://api.metacpan.org/user/favorite?access_token=$token", + "https://fastapi.metacpan.org/v1/user/favorite?access_token=$token", { content => encode_json($params), headers => { 'content-type' => 'application/json' } From 694bd8a8adf9e7b962e30d311f80b40ced0dd455 Mon Sep 17 00:00:00 2001 From: Zakariyya Mughal Date: Sun, 10 Jul 2022 07:32:32 -0400 Subject: [PATCH 14/18] Update search params for finding latest releases --- scripts/release/4-latest-release-versions-es.pl | 4 ++-- scripts/release/4a-latest-release-versions-bool-filter-es.pl | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/release/4-latest-release-versions-es.pl b/scripts/release/4-latest-release-versions-es.pl index a53d8b1..4ac4f55 100755 --- a/scripts/release/4-latest-release-versions-es.pl +++ b/scripts/release/4-latest-release-versions-es.pl @@ -19,10 +19,10 @@ query => { match_all => {} }, filter => { and => [ - { term => { 'release.status' => 'latest' } }, + { term => { 'status' => 'latest' } }, { terms => { - 'release.distribution' => + 'distribution' => [ 'Moose', 'MetaCPAN-API', 'DBIx-Class' ] }, }, diff --git a/scripts/release/4a-latest-release-versions-bool-filter-es.pl b/scripts/release/4a-latest-release-versions-bool-filter-es.pl index a5c0a09..fbfcc2f 100755 --- a/scripts/release/4a-latest-release-versions-bool-filter-es.pl +++ b/scripts/release/4a-latest-release-versions-bool-filter-es.pl @@ -11,7 +11,7 @@ index => 'cpan', type => 'release', fields => [ 'distribution', 'version' ], - size => 3, + size => 4, body => { query => { filtered => { From 9f347c8746552777e7196667725242ea2f575d70 Mon Sep 17 00:00:00 2001 From: Zakariyya Mughal Date: Wed, 13 Jul 2022 23:26:49 -0400 Subject: [PATCH 15/18] Add debug flag $ENV{METACPAN_EXAMPLES_DEBUG} This makes the output less verbose by default. --- lib/MetaCPAN/Util.pm | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/MetaCPAN/Util.pm b/lib/MetaCPAN/Util.pm index 58983e4..e6905f4 100644 --- a/lib/MetaCPAN/Util.pm +++ b/lib/MetaCPAN/Util.pm @@ -3,6 +3,8 @@ package MetaCPAN::Util; use strict; use warnings; +use constant DEBUG => !!$ENV{METACPAN_EXAMPLES_DEBUG}; + use Search::Elasticsearch; use Sub::Exporter -setup => { exports => ['es'] }; @@ -12,8 +14,35 @@ sub es { cxn_pool => 'Static::NoPing', nodes => 'https://fastapi.metacpan.org/v1', send_get_body_as => 'POST', - trace_to => 'Stdout', + ( trace_to => 'Stdout' ) x !!(DEBUG), ); } 1; + +=head1 NAME + +MetaCPAN::Util - Utilities for accessing MetaCPAN + +=head1 DESCRIPTION + +Provides shared utility code for examples. + +=head1 FUNCTIONS + +=head2 es + +Returns a L client configured for use with the +MetaCPAN API endpoint. + +=head1 ENVIRONMENT + +=over 4 + +=item C + +When set to C<1>, enables output of verbose debugging information. + +=back + +=cut From 2fe28fc64ccef55df9bf6cb1712c3086bd9c9248 Mon Sep 17 00:00:00 2001 From: Zakariyya Mughal Date: Wed, 24 Aug 2022 22:45:52 -0400 Subject: [PATCH 16/18] Use new endpoint for dist reverse dependencies Connects with . --- scripts/{search => }/reverse_dependencies/by-dist-www-mech.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename scripts/{search => }/reverse_dependencies/by-dist-www-mech.pl (62%) diff --git a/scripts/search/reverse_dependencies/by-dist-www-mech.pl b/scripts/reverse_dependencies/by-dist-www-mech.pl similarity index 62% rename from scripts/search/reverse_dependencies/by-dist-www-mech.pl rename to scripts/reverse_dependencies/by-dist-www-mech.pl index c04967b..c1196d8 100755 --- a/scripts/search/reverse_dependencies/by-dist-www-mech.pl +++ b/scripts/reverse_dependencies/by-dist-www-mech.pl @@ -10,10 +10,10 @@ my $mech = WWW::Mechanize::GZip->new; $mech->get( - "https://fastapi.metacpan.org/v1/search/reverse_dependencies/carton"); + "https://fastapi.metacpan.org/v1/reverse_dependencies/dist/Carton"); my $results = decode_json( $mech->content ); my @dists - = map { $_->{_source}->{distribution} } @{ $results->{hits}->{hits} }; + = map { $_->{distribution} } @{ $results->{data} }; p @dists; From 30d3faa0569db5afe967db115e20f2f7b2ceeda7 Mon Sep 17 00:00:00 2001 From: Zakariyya Mughal Date: Wed, 24 Aug 2022 22:46:32 -0400 Subject: [PATCH 17/18] Remove release reverse dependencies example There is no new endpoint for this script to use. --- .../by-release-version-mech.pl | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100755 scripts/search/reverse_dependencies/by-release-version-mech.pl diff --git a/scripts/search/reverse_dependencies/by-release-version-mech.pl b/scripts/search/reverse_dependencies/by-release-version-mech.pl deleted file mode 100755 index 2994064..0000000 --- a/scripts/search/reverse_dependencies/by-release-version-mech.pl +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use warnings; - -use Data::Printer; -use JSON::MaybeXS qw( decode_json ); -use WWW::Mechanize (); - -my $mech = WWW::Mechanize->new; - -$mech->get( - 'https://fastapi.metacpan.org/v1/search/reverse_dependencies/MIYAGAWA/carton-v0.9.13' -); - -my $results = decode_json( $mech->content ); - -my @dists - = map { $_->{_source}->{distribution} } @{ $results->{hits}->{hits} }; -p @dists; From 26b4f5b4f1f959fc380ed0aa1e28390eaa046fc7 Mon Sep 17 00:00:00 2001 From: Zakariyya Mughal Date: Wed, 24 Aug 2022 23:17:14 -0400 Subject: [PATCH 18/18] Add reverse dependencies example by module --- .../by-module-www-mech.pl | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100755 scripts/reverse_dependencies/by-module-www-mech.pl diff --git a/scripts/reverse_dependencies/by-module-www-mech.pl b/scripts/reverse_dependencies/by-module-www-mech.pl new file mode 100755 index 0000000..c13dca1 --- /dev/null +++ b/scripts/reverse_dependencies/by-module-www-mech.pl @@ -0,0 +1,20 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +use Data::Printer; +use JSON::MaybeXS qw( decode_json ); +use WWW::Mechanize::GZip (); + +my $mech = WWW::Mechanize::GZip->new; + +$mech->get( + "https://fastapi.metacpan.org/v1/reverse_dependencies/module/WWW::Mechanize" +); + +my $results = decode_json( $mech->content ); + +my @dists + = map { $_->{distribution} } @{ $results->{data} }; +p @dists;