Merge branch 'fix_default_directories'

* fix_default_directories:
  Fix unit test
  Update default directories
  Clean up legacy code
This commit is contained in:
Alex Grintsvayg 2017-07-18 08:31:16 -04:00
commit 83c413e10c
7 changed files with 85 additions and 59 deletions

View file

@ -15,13 +15,16 @@ at anytime.
### Changed ### Changed
* claim_show API command no longer takes name as argument * claim_show API command no longer takes name as argument
* * Linux default downloads folder changed from `~/Downloads` to `XDG_DOWNLOAD_DIR`
* Linux folders moved from the home directory to `~/.local/share/lbry`
* Windows folders moved from `%AppData%/Roaming` to `%AppData%/Local/lbry`
### Fixed ### Fixed
* Fix for https://github.com/lbryio/lbry/issues/750 * Fix for https://github.com/lbryio/lbry/issues/750
* Fixed inconsistencies in claim_show output * Fixed inconsistencies in claim_show output
* Fixed daemon process hanging when started without an internet connection * Fixed daemon process hanging when started without an internet connection
* Fixed https://github.com/lbryio/lbry/issues/774 * Fixed https://github.com/lbryio/lbry/issues/774
* Fix XDG compliance on Linux
### Deprecated ### Deprecated
* *

View file

@ -2,12 +2,18 @@ import base58
import json import json
import logging import logging
import os import os
import re
import sys import sys
import yaml import yaml
import envparse import envparse
from appdirs import user_data_dir from appdirs import user_data_dir, user_config_dir
from lbrynet.core import utils from lbrynet.core import utils
try:
from lbrynet.winhelpers.knownpaths import get_path, FOLDERID, UserHandle
except (ImportError, ValueError):
pass
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@ -43,6 +49,7 @@ settings_encoders = {
'.yml': yaml.safe_dump '.yml': yaml.safe_dump
} }
def _win_path_to_bytes(path): def _win_path_to_bytes(path):
""" """
Encode Windows paths to string. appdirs.user_data_dir() Encode Windows paths to string. appdirs.user_data_dir()
@ -58,29 +65,77 @@ def _win_path_to_bytes(path):
pass pass
return path return path
if sys.platform.startswith('darwin'):
def _get_old_directories(platform):
dirs = {}
if platform == WINDOWS:
appdata = get_path(FOLDERID.RoamingAppData, UserHandle.current)
dirs['data'] = os.path.join(appdata, 'lbrynet')
dirs['lbryum'] = os.path.join(appdata, 'lbryum')
dirs['download'] = get_path(FOLDERID.Downloads, UserHandle.current)
elif platform == DARWIN:
dirs['data'] = user_data_dir('LBRY')
dirs['lbryum'] = os.path.expanduser('~/.lbryum')
dirs['download'] = os.path.expanduser('~/Downloads')
elif platform == LINUX:
dirs['data'] = os.path.join(os.path.expanduser('~'), '~/.lbrynet')
dirs['lbryum'] = os.path.join(os.path.expanduser('~'), '~/.lbryum')
dirs['download'] = os.path.join(os.path.expanduser('~'), 'Downloads')
else:
raise ValueError('unknown platform value')
return dirs
def _get_new_directories(platform):
dirs = {}
if platform == WINDOWS:
dirs['data'] = user_data_dir('lbrynet', 'lbry')
dirs['lbryum'] = user_data_dir('lbryum', 'lbry')
dirs['download'] = get_path(FOLDERID.Downloads, UserHandle.current)
elif platform == DARWIN:
_get_old_directories(platform)
elif platform == LINUX:
dirs['data'] = user_data_dir('lbry/lbrynet')
dirs['lbryum'] = user_data_dir('lbry/lbryum')
try:
with open(os.path.join(user_config_dir(), 'user-dirs.dirs'), 'r') as xdg:
down_dir = re.search(r'XDG_DOWNLOAD_DIR=(.+)', xdg.read()).group(1)
down_dir = re.sub('\$HOME', os.getenv('HOME'), down_dir)
dirs['download'] = re.sub('\"', '', down_dir)
except EnvironmentError:
dirs['download'] = os.getenv('XDG_DOWNLOAD_DIR')
if not dirs['download']:
dirs['download'] = os.path.expanduser('~/Downloads')
else:
raise ValueError('unknown platform value')
return dirs
if 'darwin' in sys.platform:
platform = DARWIN platform = DARWIN
default_download_directory = os.path.join(os.path.expanduser('~'), 'Downloads') dirs = _get_old_directories(DARWIN)
default_data_dir = user_data_dir('LBRY') elif 'win' in sys.platform:
default_lbryum_dir = os.path.join(os.path.expanduser('~'), '.lbryum')
elif sys.platform.startswith('win'):
platform = WINDOWS platform = WINDOWS
from lbrynet.winhelpers.knownpaths import get_path, FOLDERID, UserHandle if os.path.isdir(_get_old_directories(WINDOWS)['data']) or \
os.path.isdir(_get_old_directories(WINDOWS)['lbryum']):
default_download_directory = get_path(FOLDERID.Downloads, UserHandle.current) dirs = _get_old_directories(WINDOWS)
default_data_dir = os.path.join( else:
get_path(FOLDERID.RoamingAppData, UserHandle.current), 'lbrynet') dirs = _get_new_directories(WINDOWS)
default_lbryum_dir = os.path.join( dirs['data'] = _win_path_to_bytes(dirs['data'])
get_path(FOLDERID.RoamingAppData, UserHandle.current), 'lbryum') dirs['lbryum'] = _win_path_to_bytes(dirs['lbryum'])
dirs['download'] = _win_path_to_bytes(dirs['download'])
default_download_directory = _win_path_to_bytes(default_download_directory)
default_data_dir = _win_path_to_bytes(default_data_dir)
default_lbryum_dir = _win_path_to_bytes(default_lbryum_dir)
else: else:
platform = LINUX platform = LINUX
default_download_directory = os.path.join(os.path.expanduser('~'), 'Downloads') if os.path.isdir(_get_old_directories(LINUX)['data']) or \
default_data_dir = os.path.join(os.path.expanduser('~'), '.lbrynet') os.path.isdir(_get_old_directories(LINUX)['lbryum']):
default_lbryum_dir = os.path.join(os.path.expanduser('~'), '.lbryum') dirs = _get_old_directories(LINUX)
else:
dirs = _get_new_directories(LINUX)
default_data_dir = dirs['data']
default_lbryum_dir = dirs['lbryum']
default_download_dir = dirs['download']
ICON_PATH = 'icons' if platform is WINDOWS else 'app.icns' ICON_PATH = 'icons' if platform is WINDOWS else 'app.icns'
@ -178,7 +233,7 @@ ADJUSTABLE_SETTINGS = {
'data_rate': (float, .0001), # points/megabyte 'data_rate': (float, .0001), # points/megabyte
'delete_blobs_on_remove': (bool, True), 'delete_blobs_on_remove': (bool, True),
'dht_node_port': (int, 4444), 'dht_node_port': (int, 4444),
'download_directory': (str, default_download_directory), 'download_directory': (str, default_download_dir),
'download_timeout': (int, 180), 'download_timeout': (int, 180),
'is_generous_host': (bool, True), 'is_generous_host': (bool, True),
'known_dht_nodes': (list, DEFAULT_DHT_NODES, server_port), 'known_dht_nodes': (list, DEFAULT_DHT_NODES, server_port),

View file

@ -56,7 +56,6 @@ class GetStream(object):
# fired after the metadata and the first data blob have been downloaded # fired after the metadata and the first data blob have been downloaded
self.data_downloading_deferred = defer.Deferred(None) self.data_downloading_deferred = defer.Deferred(None)
@property @property
def download_path(self): def download_path(self):
return os.path.join(self.download_directory, self.downloader.file_name) return os.path.join(self.download_directory, self.downloader.file_name)
@ -211,4 +210,3 @@ class GetStream(object):
raise raise
defer.returnValue((self.downloader, self.finished_deferred)) defer.returnValue((self.downloader, self.finished_deferred))

View file

@ -1,24 +1,14 @@
import logging import logging
import os
import sys
import mimetypes import mimetypes
from appdirs import user_data_dir
from zope.interface import implements from zope.interface import implements
from twisted.internet import defer, error, interfaces, abstract, task, reactor from twisted.internet import defer, error, interfaces, abstract, task, reactor
# TODO: omg, this code is essentially duplicated in Daemon
if sys.platform != "darwin":
data_dir = os.path.join(os.path.expanduser("~"), ".lbrynet")
else:
data_dir = user_data_dir("LBRY")
if not os.path.isdir(data_dir):
os.mkdir(data_dir)
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
STATUS_FINISHED = 'finished' STATUS_FINISHED = 'finished'
class EncryptedFileStreamer(object): class EncryptedFileStreamer(object):
""" """
Writes LBRY stream to request; will pause to wait for new data if the file Writes LBRY stream to request; will pause to wait for new data if the file
@ -31,7 +21,6 @@ class EncryptedFileStreamer(object):
bufferSize = abstract.FileDescriptor.bufferSize bufferSize = abstract.FileDescriptor.bufferSize
# How long to wait between sending blocks (needed because some # How long to wait between sending blocks (needed because some
# video players freeze up if you try to send data too fast) # video players freeze up if you try to send data too fast)
stream_interval = 0.005 stream_interval = 0.005
@ -39,7 +28,6 @@ class EncryptedFileStreamer(object):
# How long to wait before checking if new data has been appended to the file # How long to wait before checking if new data has been appended to the file
new_data_check_interval = 0.25 new_data_check_interval = 0.25
def __init__(self, request, path, stream, file_manager): def __init__(self, request, path, stream, file_manager):
def _set_content_length_header(length): def _set_content_length_header(length):
self._request.setHeader('content-length', length) self._request.setHeader('content-length', length)

View file

@ -2,26 +2,15 @@ import logging
import os import os
import shutil import shutil
import json import json
import sys
import tempfile import tempfile
from appdirs import user_data_dir
from twisted.web import server, static, resource from twisted.web import server, static, resource
from twisted.internet import defer, error from twisted.internet import defer, error
from lbrynet import conf from lbrynet import conf
from lbrynet.daemon.FileStreamer import EncryptedFileStreamer from lbrynet.daemon.FileStreamer import EncryptedFileStreamer
# TODO: omg, this code is essentially duplicated in Daemon
if sys.platform != "darwin":
data_dir = os.path.join(os.path.expanduser("~"), ".lbrynet")
else:
data_dir = user_data_dir("LBRY")
if not os.path.isdir(data_dir):
os.mkdir(data_dir)
log = logging.getLogger(__name__) log = logging.getLogger(__name__)

View file

@ -1,21 +1,14 @@
import json import json
import logging.handlers import logging.handlers
import sys
import os import os
from appdirs import user_data_dir
from twisted.internet.task import LoopingCall from twisted.internet.task import LoopingCall
from twisted.internet import reactor from twisted.internet import reactor
from lbrynet import conf
if sys.platform != "darwin": conf.initialize_settings()
log_dir = os.path.join(os.path.expanduser("~"), ".lbrynet") log_dir = conf.settings['data_dir']
else:
log_dir = user_data_dir("LBRY")
if not os.path.isdir(log_dir):
os.mkdir(log_dir)
LOG_FILENAME = os.path.join(log_dir, 'lbrynet-daemon.log') LOG_FILENAME = os.path.join(log_dir, 'lbrynet-daemon.log')
if os.path.isfile(LOG_FILENAME): if os.path.isfile(LOG_FILENAME):

View file

@ -58,6 +58,6 @@ class SettingsTest(unittest.TestCase):
# check if these directories are returned as string and not unicode # check if these directories are returned as string and not unicode
# otherwise there will be problems when calling os.path.join on # otherwise there will be problems when calling os.path.join on
# unicode directory names with string file names # unicode directory names with string file names
self.assertEqual(str, type(conf.default_download_directory)) self.assertEqual(str, type(conf.default_download_dir))
self.assertEqual(str, type(conf.default_data_dir)) self.assertEqual(str, type(conf.default_data_dir))
self.assertEqual(str, type(conf.default_lbryum_dir)) self.assertEqual(str, type(conf.default_lbryum_dir))