TT#132650 api .csv upload for provisioningtemplates

the POST /api/provicioningtemplates/<reseller>/<template>
request will accept text/csv content type to provision
many susbcribers at once.

Change-Id: I59079ba8f2bacc0ce2b1367d2bd1a7251cf4763c
mr10.2
Rene Krenn 4 years ago
parent 1bb3f6c129
commit e73dd3ea27

@ -109,7 +109,9 @@ __PACKAGE__->set_config({
Method => 'POST',
ACLDetachTo => '/api/root/invalid_user',
AllowedRole => [qw/admin reseller ccareadmin ccare/],
Does => [qw(ACL RequireSSL)]
Does => [qw(ACL RequireSSL)],
ContentType => [qw#application/json text/csv#],
ResourceContentType => ['text/csv'],
},
item_get_reseller => {
@ -173,7 +175,9 @@ __PACKAGE__->set_config({
Method => 'POST',
ACLDetachTo => '/api/root/invalid_user',
AllowedRole => [qw/admin reseller ccareadmin ccare/],
Does => [qw(ACL RequireSSL)]
Does => [qw(ACL RequireSSL)],
ContentType => [qw#application/json text/csv#],
ResourceContentType => ['text/csv'],
},
}
});
@ -336,12 +340,21 @@ sub post {
resource_media_type => $method_config->{ResourceContentType},
);
return unless $resource;
my $purge = $c->req->params->{purge_existing};
if (length($purge)
and ('1' eq $purge
or 'true' eq lc($purge))) {
$purge = 1;
} else {
$purge = 0;
}
if (!$non_json_data || !$data) {
my $context;
try {
$context = NGCP::Panel::Utils::ProvisioningTemplates::provision_begin(
c => $c,
c => $c,
purge => $purge,
);
NGCP::Panel::Utils::ProvisioningTemplates::provision_commit_row(
c => $c,
@ -367,21 +380,24 @@ sub post {
return;
}
} else {
#try {
# #$processed_ok(array), $processed_failed(array), $info, $error
# $data_processed_result = $self->process_data(
# c => $c,
# data => \$data,
# resource => $resource,
# form => $form,
# process_extras => $process_extras,
# );
#} catch($e) {
# $c->log->error("failed to process non json data: $e");
# $self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Internal Server Error");
# last;
#};
try {
my ($linecount,$errors) = NGCP::Panel::Utils::ProvisioningTemplates::process_csv(
c => $c,
data => \$data,
purge => $purge,
);
if (scalar @$errors) {
$c->log->error(sprintf('CSV file (%d lines) processed, %d error(s).', $linecount, scalar @$errors));
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Internal Server Error");
return;
} else {
$c->log->debug(sprintf('CSV file (%d lines) processed, %d error(s).', $linecount, 0));
}
} catch($e) {
$c->log->error("failed to process CSV file: $e");
$self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Internal Server Error");
return;
}
}
$self->return_representation_post($c);
@ -390,4 +406,3 @@ sub post {
}
1;

@ -246,7 +246,7 @@ sub edit :Chained('template_base') :PathPart('edit') :Args(0) {
$params->{reseller}{id} = delete $params->{reseller_id};
$params = merge($params, $c->session->{created_objects});
$c->stash->{old_name} = $template;
$c->stash->{old_name} = $c->stash->{provisioning_templates}->{$template}->{name};
if($c->user->is_superuser) {
$form = NGCP::Panel::Form::get("NGCP::Panel::Form::ProvisioningTemplate::Admin", $c);

@ -149,7 +149,6 @@ sub validate_template_name {
unless ($name =~ /^[a-zA-Z0-9 -]+$/) {
die("template name contains invalid characters\n");
}
#$c->log->warn("test: ".$template);
if (not defined $old_name
or $old_name ne $name) {
@ -525,6 +524,7 @@ sub provision_commit_row {
);
my $purge = $context->{_purge} || $values->{$PURGE_FIELD_NAME};
try {
_init_subscriber_context(
$c,

@ -151,6 +151,25 @@ sub _create_c {
}
my $db = _get_schema();
my $req = sub {
my $self = shift;
return _create_mock('_request',
_param => {
# '$c->request->params' => undef,
},
param => sub {
my $self = shift;
my $key = shift;
return $self->{param}->{$key} if $key;
return $self->{param};
},
path => sub {
my $self = shift;
return 'api/';
},
);
};
$c = _create_mock('c',
_stash => {
@ -219,20 +238,8 @@ sub _create_c {
#},
);
},
request => sub {
my $self = shift;
return _create_mock('_request',
_param => {
# '$c->request->params' => undef,
},
param => sub {
my $self = shift;
my $key = shift;
return $self->{param}->{$key} if $key;
return $self->{param};
},
);
},
request => $req,
req => $req,
);

Loading…
Cancel
Save