summaryrefslogtreecommitdiffstats
path: root/lib/App/ArchLinux/PackagerTools
diff options
context:
space:
mode:
Diffstat (limited to 'lib/App/ArchLinux/PackagerTools')
-rw-r--r--lib/App/ArchLinux/PackagerTools/Archweb.pm86
-rw-r--r--lib/App/ArchLinux/PackagerTools/Config.pm4
2 files changed, 90 insertions, 0 deletions
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/',