103 lines
2.9 KiB
Python
Executable File
103 lines
2.9 KiB
Python
Executable File
#!/usr/bin/python
|
|
"""
|
|
Packs/Unpacks `All-in-One WP Migration` packages. For more information:
|
|
https://wordpress.org/plugins/all-in-one-wp-migration/
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
from .exception import Ai1wmError
|
|
from .packer import Ai1wmPacker
|
|
from .unpacker import Ai1wmUnpacker
|
|
|
|
|
|
class Ai1wmPackage(object):
|
|
""" An unpacked All-in-One WP Migration package. """
|
|
|
|
DATABASE_FILE = 'database.sql'
|
|
INFO_FILE = 'package.json'
|
|
LOG_FILE = 'migration.log'
|
|
|
|
def __init__(self, base_dir):
|
|
""" Constructor. """
|
|
|
|
self.base_dir = base_dir
|
|
self._details = None
|
|
self._plugins = None
|
|
|
|
@property
|
|
def info_file(self):
|
|
""" Path to the migration information file. """
|
|
|
|
return os.path.join(self.base_dir, self.INFO_FILE)
|
|
|
|
@property
|
|
def database_file(self):
|
|
""" Path to the database dump file. """
|
|
|
|
return os.path.join(self.base_dir, self.DATABASE_FILE)
|
|
|
|
@property
|
|
def log_file(self):
|
|
""" Path to the migration log file. """
|
|
|
|
return os.path.join(self.base_dir, self.LOG_FILE)
|
|
|
|
@property
|
|
def details(self):
|
|
""" Details of the package. """
|
|
|
|
if self._details is None:
|
|
try:
|
|
with open(self.info_file, 'r') as fp:
|
|
self._details = json.load(fp)
|
|
except IOError:
|
|
raise Ai1wmError('error reading package information file: {}'.format(self.info_file))
|
|
return self._details
|
|
|
|
@property
|
|
def plugins(self):
|
|
""" A list of active plugins. """
|
|
|
|
if self._plugins is None:
|
|
try:
|
|
self._plugins = [i.split('/', 1)[0] for i in self.details['Plugins']]
|
|
except (KeyError, TypeError, ValueError):
|
|
raise Ai1wmError('error retrieving plugin list from package information: {}'.format(self.details))
|
|
return self._plugins
|
|
|
|
@property
|
|
def stylesheet(self):
|
|
""" The active style sheet. """
|
|
|
|
return self.details.get('Stylesheet', None)
|
|
|
|
@property
|
|
def template(self):
|
|
""" The active template. """
|
|
|
|
return self.details.get('Template', None)
|
|
|
|
def validate(self):
|
|
""" Validates the package. """
|
|
|
|
if not os.path.isfile(self.info_file):
|
|
raise Ai1wmError('package information file is missing: {}'.format(self.info_file))
|
|
if not os.path.isfile(self.database_file):
|
|
raise Ai1wmError('database dump file is missing: {}'.format(self.database_file))
|
|
return self
|
|
|
|
def unpack_from(self, source_file):
|
|
""" Unpacks a package. """
|
|
|
|
if not os.path.isfile(source_file):
|
|
raise Ai1wmError('not a file: {}'.format(source_file))
|
|
Ai1wmUnpacker.unpack(source_file, self.base_dir)
|
|
|
|
return self.validate()
|
|
|
|
def pack_to(self, target_file):
|
|
""" Packs a package. """
|
|
|
|
return Ai1wmPacker.pack(self.validate().base_dir, target_file)
|