File Coverage

lib/Smartcat/App/ProjectApi.pm
Criterion Covered Total %
statement 39 82 47.5
branch 1 22 4.5
condition 0 3 0.0
subroutine 12 15 80.0
pod 0 5 0.0
total 52 127 40.9


line stmt bran cond sub pod time code
1 2     2   13 use strict;
  2         3  
  2         71  
2 2     2   18 use warnings;
  2         4  
  2         45  
3              
4 2     2   9 use utf8;
  2         3  
  2         7  
5 2     2   46 no utf8;
  2         2  
  2         9  
6              
7             package Smartcat::App::ProjectApi;
8              
9 2     2   64 use Smartcat::Client::ProjectApi;
  2         3  
  2         43  
10 2     2   7 use Smartcat::Client::Object::CreateDocumentPropertyModel;
  2         2  
  2         10  
11 2     2   964 use Smartcat::Client::Object::ProjectChangesModel;
  2         5777  
  2         10  
12 2     2   737 use Smartcat::App::Utils;
  2         3  
  2         146  
13              
14 2     2   12 use Carp;
  2         3  
  2         116  
15             $Carp::Internal{ ('Smartcat::Client::ProjectApi') }++;
16             $Carp::Internal{ (__PACKAGE__) }++;
17              
18 2     2   10 use Log::Any qw($log);
  2         3  
  2         9  
19              
20             sub new {
21 3     3 0 10 my ( $class, $api, $rundata ) = @_;
22              
23 3         87 my $self = bless(
24             {
25             api => Smartcat::Client::ProjectApi->new($api),
26             rundata => $rundata
27             },
28             $class
29             );
30              
31 3         2761 return $self;
32             }
33              
34             sub get_project {
35 2     2 0 5 my $self = shift @_;
36              
37 2         20 $log->info("Getting project '$self->{rundata}->{project_id}'...");
38 2         1645 my $project = eval {
39             $self->{api}
40 2         14 ->project_get( project_id => $self->{rundata}->{project_id} );
41             };
42             carp $log->error(
43             sprintf(
44             "Failed to get project '%s'.\nError:\n%s",
45             $self->{rundata}->{project_id},
46 2 50       44539 format_error_message($@)
47             )
48             ) unless $project;
49              
50 2         13 return $project;
51             }
52              
53             sub update_project_external_tag {
54 0     0 0   my ($self, $project, $external_tag) = @_;
55              
56 0           my $project_name = $project->name;
57 0           my $project_description = $project->description;
58              
59             # Why do we use double encode?
60             # Because project_update_project method expects a double encoded strings for string data in project model
61              
62 0           utf8::encode($project_name);
63 0           utf8::encode($project_name);
64 0 0         if ($project_description) {
65 0           utf8::encode($project_description);
66 0           utf8::encode($project_description);
67             }
68              
69 0           my %args = (
70             name => $project_name,
71             description => $project_description,
72             deadline => $project->deadline,
73             clientId => $project->client_id,
74             domainId => $project->domain_id,
75             vendorAccountId => $project->vendor_account_id
76             );
77              
78 0 0         $args{externalTag} = $external_tag if defined $external_tag;
79              
80 0           my $model =
81             Smartcat::Client::Object::ProjectChangesModel->new(%args);
82              
83             %args = (
84             project_id => $self->{rundata}->{project_id},
85 0           model => $model);
86              
87 0           $log->info("Updating project '$self->{rundata}->{project_id}' with '$external_tag' external tag...");
88 0           eval {
89 0           $self->{api}->project_update_project( %args );
90             };
91              
92             carp $log->error(
93             sprintf(
94             "Failed to update project '%s' with external_tag '%s'.\nError:\n%s",
95             $self->{rundata}->{project_id},
96 0 0         $external_tag,
97             format_error_message($@)
98             )
99             ) if $@;
100              
101 0           return;
102             }
103              
104             sub get_all_projects {
105 0     0 0   my $self = shift @_;
106              
107 0           $log->info("Getting all projects...");
108 0           my $projects = eval { $self->{api}->project_get_all; };
  0            
109 0 0         die $log->error(
110             sprintf( "Failed to get all projects.\nError:\n%s",
111             format_error_message($@) )
112             ) unless $projects;
113              
114 0           return $projects;
115             }
116              
117             sub upload_file {
118 0     0 0   my ( $self, $path, $filename, $external_id, $meta_info, $target_languages ) = @_;
119              
120 0           my %args;
121 0 0 0       $args{targetLanguages} = $target_languages
122             if defined $target_languages && @$target_languages > 0;
123              
124 0           my $document =
125             Smartcat::Client::Object::CreateDocumentPropertyModel->new(%args);
126              
127 0           $log->info("Uploading file '$path'...");
128 0           my $utf8_path = $path;
129 0           my $utf8_filename = $filename;
130 0           utf8::encode($utf8_path);
131 0           utf8::encode($utf8_filename);
132             %args = (
133             project_id => $self->{rundata}->{project_id},
134 0           document_model => $document,
135             file => {
136             path => $utf8_path,
137             filename => $utf8_filename
138             }
139             );
140 0 0         $args{external_id} = $external_id
141             if defined $external_id;
142 0 0         $args{meta_info} = $meta_info
143             if defined $meta_info;
144             $args{disassemble_algorithm_name} =
145             $self->{rundata}->{disassemble_algorithm_name}
146 0 0         if defined $self->{rundata}->{disassemble_algorithm_name};
147             $args{preset_disassemble_algorithm} =
148             $self->{rundata}->{preset_disassemble_algorithm}
149 0 0         if defined $self->{rundata}->{preset_disassemble_algorithm};
150              
151 0           my $documents = eval { $self->{api}->project_add_document(%args) };
  0            
152 0 0         unless ($documents) {
153 0           carp $log->error(
154             sprintf(
155             "Failed to upload file '%s'.\nError:\n%s",
156             $path, format_error_message($@)
157             )
158             );
159 0           exit -1;
160             }
161              
162 0           return $documents;
163             }
164              
165             1;