Commit d43119a2 authored by gregor herrmann's avatar gregor herrmann

Imported Upstream version 0.034

parent 70447432
Release notes for HTTP-Tiny
0.034 2013-06-26 19:02:25 America/New_York
[ADDED]
- Added support for 'Basic' authorization from
user:password parameters in the URL
0.033 2013-06-21 06:26:51 America/New_York
[FIXED]
- Modifying the 'agent' attribute with the accessor will append the
default agent string, just like setting it during construction
0.032 2013-06-20 11:41:24 America/New_York
[ADDED]
- Added 'no_proxy' attribute, defaulting to $ENV{no_proxy}
0.031 2013-06-16 23:18:18 America/New_York
[FIXED]
- Fixed bug receiving 0-length content bodies
0.030 2013-06-13 11:46:15 America/New_York
[FIXED]
- Requests with the empty string as body content no longer generate
'content-type' and 'content-length' headers.
0.029 2013-04-17 13:49:07 America/New_York
[FIXED]
- Checks for new enough OpenSSL library before using SNI (otherwise
IO::Socket::SSL throws warnings)
0.028 2013-03-05 14:11:57 America/New_York
[SUPPORT]
- Fix repository/issue links to reflect proper repo name
0.027 2013-03-05 12:02:58 America/New_York
[SUPPORT]
- Changed metadata to point to the chansen github repository
for code and issues
[DOCUMENTATION]
- Added hyperlink for HTTP::CookieJar
0.026 2013-03-04 22:53:39 America/New_York
[ADDED]
- Added cookie support if an HTTP::CookieJar object is provided in the
'cookie_jar' attribute [Edward Zborowski]
0.025 2012-12-26 12:09:43 America/New_York
[ADDED]
- Agent string appends default if it ends in a space, just like LWP
[Chris Weyl]
0.024 2012-10-09 20:44:53 America/New_York
[ADDED]
- SSL connections now auto-retry I/O after SSL renegotiation [Alan
Gardner]
[FIXED]
- User-specified CA bundles take precedence over Mozilla::CA [Alan
Gardner]
[PREREQS]
- SSL support now requires Net::SSLeay 1.49 or greater to support
auto-retry [Mike Doherty]
- Downgraded IO::Socket::SSL and related prereqs to 'suggests' again
0.023 2012-09-19 09:55:46 America/New_York
[PREREQS]
- IO::Socket::SSL and related prereqs changed to 'required' for dev
release to get better failure diagnostics from CPAN Testers
[TESTING]
- Skip live SSL testing unless IO::Socket::SSL 1.56+ installed
0.022 2012-06-01 23:31:40 America/New_York
[ADDED]
......@@ -207,3 +308,4 @@ Release notes for HTTP-Tiny
- Initial CPAN release
# vim: ts=2 sts=2 sw=2 et:
This software is copyright (c) 2012 by Christian Hansen.
This software is copyright (c) 2013 by Christian Hansen.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
......@@ -12,7 +12,7 @@ b) the "Artistic License"
--- The GNU General Public License, Version 1, February 1989 ---
This software is Copyright (c) 2012 by Christian Hansen.
This software is Copyright (c) 2013 by Christian Hansen.
This is free software, licensed under:
......@@ -272,7 +272,7 @@ That's all there is to it!
--- The Artistic License 1.0 ---
This software is Copyright (c) 2012 by Christian Hansen.
This software is Copyright (c) 2013 by Christian Hansen.
This is free software, licensed under:
......
CONTRIBUTING
Changes
LICENSE
MANIFEST
......@@ -5,7 +6,6 @@ META.json
META.yml
Makefile.PL
README
README.PATCHING
dist.ini
eg/get.pl
eg/mirror.pl
......@@ -17,12 +17,14 @@ t/00-report-prereqs.t
t/000_load.t
t/001_api.t
t/002_croakage.t
t/003_agent.t
t/010_url.t
t/020_headers.t
t/030_response.t
t/040_content.t
t/050_chunked_body.t
t/060_http_date.t
t/070_cookie_jar.t
t/100_get.t
t/101_head.t
t/102_put.t
......@@ -31,11 +33,26 @@ t/104_post.t
t/110_mirror.t
t/130_redirect.t
t/140_proxy.t
t/141_no_proxy.t
t/150_post_form.t
t/160_cookies.t
t/161_basic_auth.t
t/200_live.t
t/200_live_local_ip.t
t/210_live_ssl.t
t/BrokenCookieJar.pm
t/SimpleCookieJar.pm
t/Util.pm
t/cases/auth-01.txt
t/cases/auth-02.txt
t/cases/auth-03.txt
t/cases/cookies-01.txt
t/cases/cookies-02.txt
t/cases/cookies-03.txt
t/cases/cookies-04.txt
t/cases/cookies-05.txt
t/cases/cookies-06.txt
t/cases/cookies-07.txt
t/cases/delete-01.txt
t/cases/form-01.txt
t/cases/form-02.txt
......@@ -86,6 +103,7 @@ t/cases/redirect-09.txt
xt/author/critic.t
xt/author/pod-spell.t
xt/release/distmeta.t
xt/release/minimum-version.t
xt/release/pod-coverage.t
xt/release/pod-syntax.t
xt/release/portability.t
......
......@@ -2,11 +2,10 @@
"abstract" : "A small, simple, correct HTTP/1.1 client",
"author" : [
"Christian Hansen <chansen@cpan.org>",
"David Golden <dagolden@cpan.org>",
"Mike Doherty <doherty@cpan.org>"
"David Golden <dagolden@cpan.org>"
],
"dynamic_config" : 0,
"generated_by" : "Dist::Zilla version 4.300017, CPAN::Meta::Converter version 2.120921",
"generated_by" : "Dist::Zilla version 4.300035, CPAN::Meta::Converter version 2.131560",
"license" : [
"perl_5"
],
......@@ -32,10 +31,25 @@
"ExtUtils::MakeMaker" : "6.30"
}
},
"develop" : {
"requires" : {
"Pod::Coverage::TrustPod" : "0",
"Test::CPAN::Meta" : "0",
"Test::Pod" : "1.41",
"Test::Pod::Coverage" : "1.08"
}
},
"runtime" : {
"recommends" : {
"HTTP::CookieJar" : "0.001",
"IO::Socket::SSL" : "1.42",
"Mozilla::CA" : "20120823",
"Net::SSLeay" : "1.49"
},
"requires" : {
"Carp" : "0",
"IO::Socket" : "0",
"MIME::Base64" : "0",
"Time::Local" : "0",
"bytes" : "0",
"perl" : "5.006",
......@@ -43,8 +57,7 @@
"warnings" : "0"
},
"suggests" : {
"IO::Socket::SSL" : "1.56",
"Mozilla::CA" : "0"
"IO::Socket::SSL" : "1.56"
}
},
"test" : {
......@@ -60,8 +73,9 @@
"IO::Dir" : "0",
"IO::File" : "0",
"IO::Socket::INET" : "0",
"IPC::Cmd" : "0",
"List::Util" : "0",
"Test::More" : "0.88",
"Test::More" : "0.96",
"open" : "0"
}
}
......@@ -69,22 +83,39 @@
"provides" : {
"HTTP::Tiny" : {
"file" : "lib/HTTP/Tiny.pm",
"version" : "0.022"
"version" : "0.034"
}
},
"release_status" : "stable",
"resources" : {
"bugtracker" : {
"mailto" : "bug-http-tiny at rt.cpan.org",
"web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=HTTP-Tiny"
"web" : "https://github.com/chansen/p5-http-tiny/issues"
},
"homepage" : "https://github.com/dagolden/p5-http-tiny",
"homepage" : "https://metacpan.org/release/HTTP-Tiny",
"repository" : {
"type" : "git",
"url" : "https://github.com/dagolden/p5-http-tiny.git",
"web" : "https://github.com/dagolden/p5-http-tiny"
"url" : "git://github.com/chansen/p5-http-tiny.git",
"web" : "https://github.com/chansen/p5-http-tiny"
}
},
"version" : "0.022"
"version" : "0.034",
"x_contributors" : [
"Alan Gardner <gardner@pythian.com>",
"Alessandro Ghedini <al3xbio@gmail.com>",
"Brad Gilbert <bgills@cpan.org>",
"Chris Nehren <apeiron@cpan.org>",
"Chris Weyl <cweyl@alumni.drew.edu>",
"Claes Jakobsson <claes@surfar.nu>",
"Craig Berry <cberry@cpan.org>",
"David Mitchell <davem@iabyn.com>",
"Edward Zborowski <ed@rubensteintech.com>",
"Jess Robinson <castaway@desert-island.me.uk>",
"Lukas Eklund <leklund@gmail.com>",
"Martin-Louis Bright <mlbright@gmail.com>",
"Mike Doherty <doherty@cpan.org>",
"Serguei Trouchelle <stro@cpan.org>",
"Syohei YOSHIDA <syohex@gmail.com>",
"Tony Cook <tony@develop-help.com>"
]
}
......@@ -3,7 +3,6 @@ abstract: 'A small, simple, correct HTTP/1.1 client'
author:
- 'Christian Hansen <chansen@cpan.org>'
- 'David Golden <dagolden@cpan.org>'
- 'Mike Doherty <doherty@cpan.org>'
build_requires:
Data::Dumper: 0
Exporter: 0
......@@ -16,13 +15,14 @@ build_requires:
IO::Dir: 0
IO::File: 0
IO::Socket::INET: 0
IPC::Cmd: 0
List::Util: 0
Test::More: 0.88
Test::More: 0.96
open: 0
configure_requires:
ExtUtils::MakeMaker: 6.30
dynamic_config: 0
generated_by: 'Dist::Zilla version 4.300017, CPAN::Meta::Converter version 2.120921'
generated_by: 'Dist::Zilla version 4.300035, CPAN::Meta::Converter version 2.131560'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
......@@ -39,17 +39,40 @@ no_index:
provides:
HTTP::Tiny:
file: lib/HTTP/Tiny.pm
version: 0.022
version: 0.034
recommends:
HTTP::CookieJar: 0.001
IO::Socket::SSL: 1.42
Mozilla::CA: 20120823
Net::SSLeay: 1.49
requires:
Carp: 0
IO::Socket: 0
MIME::Base64: 0
Time::Local: 0
bytes: 0
perl: 5.006
strict: 0
warnings: 0
resources:
bugtracker: http://rt.cpan.org/Public/Dist/Display.html?Name=HTTP-Tiny
homepage: https://github.com/dagolden/p5-http-tiny
repository: https://github.com/dagolden/p5-http-tiny.git
version: 0.022
bugtracker: https://github.com/chansen/p5-http-tiny/issues
homepage: https://metacpan.org/release/HTTP-Tiny
repository: git://github.com/chansen/p5-http-tiny.git
version: 0.034
x_contributors:
- 'Alan Gardner <gardner@pythian.com>'
- 'Alessandro Ghedini <al3xbio@gmail.com>'
- 'Brad Gilbert <bgills@cpan.org>'
- 'Chris Nehren <apeiron@cpan.org>'
- 'Chris Weyl <cweyl@alumni.drew.edu>'
- 'Claes Jakobsson <claes@surfar.nu>'
- 'Craig Berry <cberry@cpan.org>'
- 'David Mitchell <davem@iabyn.com>'
- 'Edward Zborowski <ed@rubensteintech.com>'
- 'Jess Robinson <castaway@desert-island.me.uk>'
- 'Lukas Eklund <leklund@gmail.com>'
- 'Martin-Louis Bright <mlbright@gmail.com>'
- 'Mike Doherty <doherty@cpan.org>'
- 'Serguei Trouchelle <stro@cpan.org>'
- 'Syohei YOSHIDA <syohex@gmail.com>'
- 'Tony Cook <tony@develop-help.com>'
......@@ -10,23 +10,8 @@ use ExtUtils::MakeMaker 6.30;
my %WriteMakefileArgs = (
"ABSTRACT" => "A small, simple, correct HTTP/1.1 client",
"AUTHOR" => "Christian Hansen <chansen\@cpan.org>, David Golden <dagolden\@cpan.org>, Mike Doherty <doherty\@cpan.org>",
"BUILD_REQUIRES" => {
"Data::Dumper" => 0,
"Exporter" => 0,
"ExtUtils::MakeMaker" => 0,
"File::Basename" => 0,
"File::Find" => 0,
"File::Spec" => 0,
"File::Spec::Functions" => 0,
"File::Temp" => 0,
"IO::Dir" => 0,
"IO::File" => 0,
"IO::Socket::INET" => 0,
"List::Util" => 0,
"Test::More" => "0.88",
"open" => 0
},
"AUTHOR" => "Christian Hansen <chansen\@cpan.org>, David Golden <dagolden\@cpan.org>",
"BUILD_REQUIRES" => {},
"CONFIGURE_REQUIRES" => {
"ExtUtils::MakeMaker" => "6.30"
},
......@@ -37,18 +22,49 @@ my %WriteMakefileArgs = (
"PREREQ_PM" => {
"Carp" => 0,
"IO::Socket" => 0,
"MIME::Base64" => 0,
"Time::Local" => 0,
"bytes" => 0,
"strict" => 0,
"warnings" => 0
},
"VERSION" => "0.022",
"TEST_REQUIRES" => {
"Data::Dumper" => 0,
"Exporter" => 0,
"ExtUtils::MakeMaker" => 0,
"File::Basename" => 0,
"File::Find" => 0,
"File::Spec" => 0,
"File::Spec::Functions" => 0,
"File::Temp" => 0,
"IO::Dir" => 0,
"IO::File" => 0,
"IO::Socket::INET" => 0,
"IPC::Cmd" => 0,
"List::Util" => 0,
"Test::More" => "0.96",
"open" => 0
},
"VERSION" => "0.034",
"test" => {
"TESTS" => "t/*.t"
}
);
unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) {
my $tr = delete $WriteMakefileArgs{TEST_REQUIRES};
my $br = $WriteMakefileArgs{BUILD_REQUIRES};
for my $mod ( keys %$tr ) {
if ( exists $br->{$mod} ) {
$br->{$mod} = $tr->{$mod} if $tr->{$mod} > $br->{$mod};
}
else {
$br->{$mod} = $tr->{$mod};
}
}
}
unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) {
my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};
my $pp = $WriteMakefileArgs{PREREQ_PM};
......
......@@ -2,7 +2,7 @@ NAME
HTTP::Tiny - A small, simple, correct HTTP/1.1 client
VERSION
version 0.022
version 0.034
SYNOPSIS
use HTTP::Tiny;
......@@ -38,7 +38,14 @@ METHODS
* "agent"
A user-agent string (defaults to 'HTTP::Tiny/$VERSION')
A user-agent string (defaults to 'HTTP-Tiny/$VERSION'). If "agent"
ends in a space character, the default user-agent string is
appended.
* "cookie_jar"
An instance of HTTP::CookieJar or equivalent class that supports the
"add" and "cookie_header" methods
* "default_headers"
......@@ -61,6 +68,12 @@ METHODS
URL of a proxy server to use (default is $ENV{http_proxy} if set)
* "no_proxy"
List of domain suffixes that should not be proxied. Must be a
comma-separated string or an array reference. (default is
$ENV{no_proxy})
* "timeout"
Request timeout in seconds (default is 60)
......@@ -120,9 +133,9 @@ METHODS
Executes a "GET" request for the URL and saves the response body to the
file name provided. The URL must have unsafe characters escaped and
international domain names encoded. If the file already exists, the
request will includes an "If-Modified-Since" header with the
modification timestamp of the file. You may specify a different
"If-Modified-Since" header yourself in the "$options->{headers}" hash.
request will include an "If-Modified-Since" header with the modification
timestamp of the file. You may specify a different "If-Modified-Since"
header yourself in the "$options->{headers}" hash.
The "success" field of the response will be true if the status code is
2XX or if the status code is 304 (unmodified).
......@@ -137,8 +150,15 @@ METHODS
Executes an HTTP request of the given method type ('GET', 'HEAD',
'POST', 'PUT', etc.) on the given URL. The URL must have unsafe
characters escaped and international domain names encoded. A hashref of
options may be appended to modify the request.
characters escaped and international domain names encoded.
If the URL includes a "user:password" stanza, they will be used for
Basic-style authorization headers. (Authorization headers will not be
included in a redirected request.) For example:
$http->request('GET', 'http://Aladdin:open sesame@example.com/');
A hashref of options may be appended to modify the request.
Valid options are:
......@@ -169,6 +189,9 @@ METHODS
iteratively to provide the content body of the request. It should return
the empty string or undef when the iterator is exhausted.
If the "content" option is the empty string, no "content-type" or
"content-length" headers will be generated.
If the "data_callback" option is provided, it will be called iteratively
until the entire response body is received. The first argument will be a
string containing a chunk of the response body, the second argument will
......@@ -227,9 +250,10 @@ METHODS
SSL SUPPORT
Direct "https" connections are supported only if IO::Socket::SSL 1.56 or
greater is installed. An exception will be thrown if a new enough
IO::Socket::SSL is not installed or if the SSL encryption fails. There
is no support for "https" connections via proxy (i.e. RFC 2817).
greater and Net::SSLeay 1.49 or greater are installed. An exception will
be thrown if a new enough versions of these modules not installed or if
the SSL encryption fails. There is no support for "https" connections
via proxy (i.e. RFC 2817).
SSL provides two distinct capabilities:
......@@ -316,15 +340,18 @@ LIMITATIONS
* Persistent connections are not supported. The "Connection" header
will always be set to "close".
* Cookies are not directly supported. Users that set a "Cookie" header
should also set "max_redirect" to zero to ensure cookies are not
inappropriately re-transmitted.
* Cookie support requires HTTP::CookieJar or an equivalent class.
* Only the "http_proxy" environment variable is supported in the
format "http://HOST:PORT/". If a "proxy" argument is passed to "new"
(including undef), then the "http_proxy" environment variable is
ignored.
* "no_proxy" environment variable is supported in the format
comma-separated list of domain extensions proxy should not be used
for. If a "no_proxy" argument is passed to "new", then the
"no_proxy" environment variable is ignored.
* There is no provision for delaying a request body using an "Expect"
header. Unexpected "1XX" responses are silently ignored as per the
specification.
......@@ -337,35 +364,75 @@ LIMITATIONS
* There is no support for IPv6 of any kind.
SEE ALSO
* LWP::UserAgent
* HTTP::Thin - HTTP::Tiny wrapper with HTTP::Request/HTTP::Response
compatibility
* HTTP::Tiny::Mech - Wrap WWW::Mechanize instance in HTTP::Tiny
compatible interface
* IO::Socket::SSL - Required for SSL support
* IO::Socket::SSL
* LWP::UserAgent - If HTTP::Tiny isn't enough for you, this is the
"standard" way to do things
* Mozilla::CA
* Mozilla::CA - Required if you want to validate SSL certificates
* Net::SSLeay - Required for SSL support
SUPPORT
Bugs / Feature Requests
Please report any bugs or feature requests through the issue tracker at
<http://rt.cpan.org/Public/Dist/Display.html?Name=HTTP-Tiny>. You will
be notified automatically of any progress on your issue.
<https://github.com/chansen/p5-http-tiny/issues>. You will be notified
automatically of any progress on your issue.
Source Code
This is open source software. The code repository is available for
public review and contribution under the terms of the license.
<https://github.com/dagolden/p5-http-tiny>
<https://github.com/chansen/p5-http-tiny>
git clone https://github.com/dagolden/p5-http-tiny.git
git clone git://github.com/chansen/p5-http-tiny.git
AUTHORS
* Christian Hansen <chansen@cpan.org>
* David Golden <dagolden@cpan.org>
CONTRIBUTORS
* Alan Gardner <gardner@pythian.com>
* Alessandro Ghedini <al3xbio@gmail.com>
* Brad Gilbert <bgills@cpan.org>
* Chris Nehren <apeiron@cpan.org>
* Chris Weyl <cweyl@alumni.drew.edu>
* Claes Jakobsson <claes@surfar.nu>
* Craig Berry <cberry@cpan.org>
* David Mitchell <davem@iabyn.com>
* Edward Zborowski <ed@rubensteintech.com>
* Jess Robinson <castaway@desert-island.me.uk>
* Lukas Eklund <leklund@gmail.com>
* Martin-Louis Bright <mlbright@gmail.com>
* Mike Doherty <doherty@cpan.org>
* Serguei Trouchelle <stro@cpan.org>
* Syohei YOSHIDA <syohex@gmail.com>
* Tony Cook <tony@develop-help.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2012 by Christian Hansen.
This software is copyright (c) 2013 by Christian Hansen.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
......
name = HTTP-Tiny
author = Christian Hansen <chansen@cpan.org>
author = David Golden <dagolden@cpan.org>
author = Mike Doherty <doherty@cpan.org>
license = Perl_5
copyright_holder = Christian Hansen
[@DAGOLDEN]
AutoMetaResources.bugtracker.rt = 0
AutoMetaResources.bugtracker.github = 0
stopwords = Alessandro
stopwords = CA's
stopwords = CAcert
stopwords = Claes
stopwords = EINTR
stopwords = Eklund
stopwords = Ghedini
stopwords = IPv
stopwords = Jakobsson
stopwords = Lukas
stopwords = Nehren
stopwords = SSL
stopwords = Serguei
stopwords = Trouchelle
stopwords = Weyl
stopwords = Zborowski
stopwords = chunked
stopwords = iteratively
stopwords = proxied
stopwords = redirections
stopwords = timestamp
stopwords = CA's
stopwords = CAcert
[MetaResources]
bugtracker.web = https://github.com/chansen/p5-http-tiny/issues
repository.url = git://github.com/chansen/p5-http-tiny.git
repository.web = https://github.com/chansen/p5-http-tiny
repository.type = git
[RemovePrereqs]
remove = Errno
remove = HTTP::CookieJar
remove = IO::Socket::SSL
remove = Mozilla::CA
remove = Net::SSLeay
[Prereqs / Recommends]
HTTP::CookieJar = 0.001
IO::Socket::SSL = 1.42
Mozilla::CA = 20120823
Net::SSLeay = 1.49
[Prereqs / Suggests]
IO::Socket::SSL = 1.56
Mozilla::CA = 0
[Test::ReportPrereqs]
This diff is collapsed.
......@@ -13,7 +13,6 @@ allow = refs
[-ControlStructures::ProhibitUnlessBlocks]
[-Documentation::RequirePodSections]
[-InputOutput::ProhibitInteractiveTest]
[-Miscellanea::RequireRcsKeywords]
[-References::ProhibitDoubleSigils]
[-RegularExpressions::RequireExtendedFormatting]
[-InputOutput::ProhibitTwoArgOpen]
......
......@@ -70,4 +70,5 @@ $plan ? (plan tests => $plan) : (plan skip_all => "no tests to run");
script_compiles( $file, "$script script compiles" );
}
}
}
......@@ -3,19 +3,12 @@
use strict;
use warnings;
use Test::More;
use Test::More tests => 1;
use ExtUtils::MakeMaker;
use File::Spec::Functions;
use List::Util qw/max/;
if ( $ENV{AUTOMATED_TESTING} ) {
plan tests => 1;
}
else {
plan skip_all => '$ENV{AUTOMATED_TESTING} not set';
}
my @modules = qw(
Carp
Data::Dumper
......@@ -26,13 +19,17 @@ my @modules = qw(
File::Spec
File::Spec::Functions
File::Temp
HTTP::CookieJar
IO::Dir
IO::File
IO::Socket
IO::Socket::INET
IO::Socket::SSL
IPC::Cmd
List::Util
MIME::Base64
Mozilla::CA
Net::SSLeay
Test::More
Time::Local
bytes
......@@ -48,6 +45,7 @@ my $cpan_meta = "CPAN::Meta";
if ( -f "MYMETA.json" && eval "require $cpan_meta" ) { ## no critic
if ( my $meta = eval { CPAN::Meta->load_file("MYMETA.json") } ) {
my $prereqs = $meta->prereqs;
delete $prereqs->{develop};
my %uniq = map {$_ => 1} map { keys %$_ } map { values %$_ } values %$prereqs;
$uniq{$_} = 1 for @modules; # don't lose any static ones
@modules = sort keys %uniq;
......@@ -71,7 +69,7 @@ for my $mod ( @modules ) {
push @reports, ["missing", $mod];
}
}
if ( @reports ) {
my $vl = max map { length $_->[0] } @reports;