From b238f10d9441afe1565cf698c54b69a58bbc4a45 Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Tue, 18 Dec 2018 00:34:53 +0100 Subject: Fetch maintainers from archweb Signed-off-by: Florian Pritz --- lib/App/ArchLinux/PackagerTools/Archweb.pm | 86 ++++++++++++++++++++++++++++++ lib/App/ArchLinux/PackagerTools/Config.pm | 4 ++ 2 files changed, 90 insertions(+) create mode 100644 lib/App/ArchLinux/PackagerTools/Archweb.pm (limited to 'lib/App/ArchLinux/PackagerTools') diff --git a/lib/App/ArchLinux/PackagerTools/Archweb.pm b/lib/App/ArchLinux/PackagerTools/Archweb.pm new file mode 100644 index 0000000..5f3bcfa --- /dev/null +++ b/lib/App/ArchLinux/PackagerTools/Archweb.pm @@ -0,0 +1,86 @@ +package App::ArchLinux::PackagerTools::Archweb; +use strictures; + +use autodie; +use Function::Parameters; +use Log::Any qw($log); +use WWW::JSON; + +use App::ArchLinux::PackagerTools::Cache; +use App::ArchLinux::PackagerTools::Config; + +=head1 NAME + +App::ArchLinux::PackagerTools::Archweb - ShortDesc + +=head1 SYNOPSIS + +use App::ArchLinux::PackagerTools::Archweb; + +# synopsis... + +=head1 DESCRIPTION + +# longer description... + +=head1 METHODS + +=head2 new + + my $archweb = App::ArchLinux::PackagerTools::Archweb->new(); + +Returns a new instance. + +=cut + +method new($class: $context, $deps = {}) { + $deps->{config} //= App::ArchLinux::PackagerTools::Config->new($context); + $deps->{cache} //= App::ArchLinux::PackagerTools::Cache->new($context); + + my $base_url = $deps->{config}->get_config()->{archweb}->{base_url}; + $deps->{wj} //= WWW::JSON->new(base_url => $base_url); + + return $class->new_no_defaults($context, $deps); +} + +method new_no_defaults($class: $context, $deps = {}) { + return $context->{$class} if defined $context->{$class}; + + my $self = {}; + bless $self, $class; + $self->{deps} = $deps; + $context->{$class} = $self; + return $self; +} + +=head2 Public Methods + +=cut + +=head3 get_maintainers + + my $maintainers = $archweb->get_maintainers($pkgname); + print $maintainers->[0]->{name}; + +Return a list with the names of the maintainers of a package. + +=cut + +method get_maintainers($pkgname) { + my $cache_timeout = $self->{deps}->{config}->{archweb}->{cache_timeout}; + my $json = $self->{deps}->{cache}->compute("archweb-package-json-$pkgname", $cache_timeout, sub { + $log->debugf("Gettings maintainers for pkgname: %s", $pkgname); + my $res = $self->{deps}->{wj}->get("/packages/search/json", {name => $pkgname}); + my $json = $res->res; + croak $log->errorf("API returned no result for search for package %s", $pkgname) if $json->{results}->@* == 0 or !$res->success; + $log->debugf("Result is %s", $json); + return $json; + }); + my $maintainers = $json->{results}->[0]->{maintainers}; + $log->debugf("Found maintainers: %s", $maintainers); + return [map {name => $_}, $maintainers->@*]; +} + +1; + +__END__ diff --git a/lib/App/ArchLinux/PackagerTools/Config.pm b/lib/App/ArchLinux/PackagerTools/Config.pm index 8fab001..417c925 100644 --- a/lib/App/ArchLinux/PackagerTools/Config.pm +++ b/lib/App/ArchLinux/PackagerTools/Config.pm @@ -103,6 +103,10 @@ method _get_default_config() { cache => { root_dir => path(($ENV{XDG_CACHE_HOME} // $ENV{HOME}."/.cache")."/perlpkg/v1/")->stringify(), }, + archweb => { + cache_timeout => '60m', + base_url => 'https://www.archlinux.org/', + }, cpan => { cache_timeout => '60m', mirror_url => 'https://cpan.metacpan.org/', -- cgit v1.2.3-24-g4f1b