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

@ -246,7 +246,7 @@ sub edit :Chained('template_base') :PathPart('edit') :Args(0) {
$params->{reseller}{id} = delete $params->{reseller_id}; $params->{reseller}{id} = delete $params->{reseller_id};
$params = merge($params, $c->session->{created_objects}); $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) { if($c->user->is_superuser) {
$form = NGCP::Panel::Form::get("NGCP::Panel::Form::ProvisioningTemplate::Admin", $c); $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 -]+$/) { unless ($name =~ /^[a-zA-Z0-9 -]+$/) {
die("template name contains invalid characters\n"); die("template name contains invalid characters\n");
} }
#$c->log->warn("test: ".$template);
if (not defined $old_name if (not defined $old_name
or $old_name ne $name) { or $old_name ne $name) {
@ -525,6 +524,7 @@ sub provision_commit_row {
); );
my $purge = $context->{_purge} || $values->{$PURGE_FIELD_NAME}; my $purge = $context->{_purge} || $values->{$PURGE_FIELD_NAME};
try { try {
_init_subscriber_context( _init_subscriber_context(
$c, $c,

@ -151,6 +151,25 @@ sub _create_c {
} }
my $db = _get_schema(); 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', $c = _create_mock('c',
_stash => { _stash => {
@ -219,20 +238,8 @@ sub _create_c {
#}, #},
); );
}, },
request => sub { request => $req,
my $self = shift; req => $req,
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};
},
);
},
); );

Loading…
Cancel
Save