5
5
import shutil
6
6
import subprocess
7
7
import tempfile
8
- from typing import Optional
8
+ from typing import List , Optional
9
9
from urllib .request import urlretrieve
10
10
from zipfile import ZipFile
11
11
@@ -14,11 +14,10 @@ class Windows:
14
14
"""Download ApertiumWin64 and Move to %localappdata%"""
15
15
base_link = 'http://apertium.projectjj.com/{}'
16
16
17
- def __init__ (self , languages : list ) -> None :
17
+ def __init__ (self ) -> None :
18
18
self ._install_path = os .getenv ('LOCALAPPDATA' )
19
19
self ._apertium_path = os .path .join (self ._install_path , 'apertium-all-dev' )
20
20
self ._download_path = tempfile .mkdtemp ()
21
- self ._languages = languages
22
21
logging .basicConfig (format = '%(asctime)s %(message)s' , level = logging .DEBUG )
23
22
self ._logger = logging .getLogger ()
24
23
self ._logger .setLevel (logging .DEBUG )
@@ -45,18 +44,15 @@ def _download_apertium_windows(self) -> None:
45
44
46
45
self ._download_zips (apertium_windows , self ._install_path )
47
46
48
- def _download_package (self ) -> None :
47
+ def _download_package (self , packages : List [ str ] ) -> None :
49
48
"""Installs Language Data to Apertium"""
50
49
51
- if platform .system () == 'Windows' :
52
- zip_path = 'win32/nightly/data.php?zip='
53
- else :
54
- raise ValueError ('Installation for {} is not supported' .format (platform .system ()))
55
- language_zip = {}
56
- for curr_lang in self ._languages :
57
- language_zip [curr_lang ] = zip_path + curr_lang
50
+ zip_path = 'win32/nightly/data.php?zip='
51
+ package_zip = {}
52
+ for curr_package in packages :
53
+ package_zip [curr_package ] = zip_path + curr_package
58
54
59
- self ._download_zips (language_zip , self ._download_path )
55
+ self ._download_zips (package_zip , self ._download_path )
60
56
61
57
# move the extracted files to desired location
62
58
lang_data_path = os .path .join (self ._download_path , 'usr' , 'share' , 'apertium' )
@@ -100,49 +96,61 @@ def _edit_modes(self) -> None:
100
96
def install_apertium_base (self ) -> None :
101
97
self ._download_apertium_windows ()
102
98
103
- def install_apertium_language (self ) -> None :
104
- self ._download_package ()
99
+ def install_apertium_language (self , language : List [ str ] ) -> None :
100
+ self ._download_package (language )
105
101
self ._edit_modes ()
106
102
103
+ def install_wrapper (self , swig_wrappers : List [str ]) -> None :
104
+ pass
105
+
107
106
108
107
class Ubuntu :
109
- def __init__ (self , languages : list ) -> None :
110
- self ._languages = languages
108
+ def __init__ (self ) -> None :
111
109
init_script = 'wget http://apertium.projectjj.com/apt/install-nightly.sh -O - | sudo bash'
112
110
subprocess .run (init_script , shell = True , check = True )
113
- self ._languages = languages
114
111
115
112
@staticmethod
116
- def _download_package (packages : list ) -> None :
113
+ def _download_package (packages : List [ str ] ) -> None :
117
114
command = 'sudo apt-get -f --allow-unauthenticated install {}'
118
115
for package in packages :
119
116
subprocess .run (command .format (package ), shell = True , check = True )
120
117
121
- def install_apertium_language (self ) -> None :
122
- install_packages = self ._languages
123
- self ._download_package (install_packages )
118
+ def install_apertium_language (self , languages : List [str ]) -> None :
119
+ self ._download_package (languages )
124
120
125
121
def install_apertium_base (self ) -> None :
126
122
self ._download_package (['apertium-all-dev' ])
127
123
124
+ def install_wrapper (self , swig_wrappers : List [str ]) -> None :
125
+ self ._download_package (swig_wrappers )
128
126
129
- def install_language_pack (languages : list = None , install_base : bool = False ) -> None :
130
- if languages is None :
131
- languages = ['apertium-eng' , 'apertium-en-es' ]
127
+
128
+ def get_installer_object ():
132
129
apertium_installer = None
133
- user_platform = platform .system ()
134
- if apertium_installer == 'Windows' :
135
- apertium_installer = Windows (languages )
136
- elif apertium_installer == 'Linux' :
137
- distro_name = ''
130
+ if platform .system () == 'Windows' :
131
+ apertium_installer = Windows ()
132
+ elif platform .system () == 'Linux' :
138
133
with open ('/etc/os-release' ) as os_release :
139
- distro_name = os_release .readline ().split ('" ' )[- 1 ]
134
+ distro_name = os_release .readline ().split ('= ' )[- 1 ]. strip (). replace ( '"' , '' )
140
135
if distro_name == 'Ubuntu' :
141
- apertium_installer = Ubuntu (languages )
136
+ apertium_installer = Ubuntu ()
142
137
else :
143
138
raise ValueError ('Installation on {} not supported' .format (distro_name ))
144
- else :
145
- raise ValueError ('{} is not supported' .format (apertium_installer ))
146
- if install_base :
147
- apertium_installer .install_apertium_base ()
148
- apertium_installer .install_apertium_language ()
139
+ return apertium_installer
140
+
141
+
142
+ def install_apertium () -> None :
143
+ apertium_installer = get_installer_object ()
144
+ apertium_installer .install_apertium_base ()
145
+
146
+
147
+ def install_language_pack (languages : List [str ] = None ) -> None :
148
+ if languages is None :
149
+ languages = ['apertium-eng' , 'apertium-en-es' ]
150
+ apertium_installer = get_installer_object ()
151
+ apertium_installer .install_apertium_language (languages )
152
+
153
+
154
+ def install_wrapper (swig_wrappers : List [str ]) -> None :
155
+ apertium_installer = get_installer_object ()
156
+ apertium_installer .install_wrapper (swig_wrappers )
0 commit comments