File: browser_paths.py

package info (click to toggle)
browser-cookie3 0.20.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 188 kB
  • sloc: python: 1,595; makefile: 4
file content (122 lines) | stat: -rw-r--r-- 4,531 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import os
import sys

from . import BrowserName, logger


def get_username():
    try:
        return os.getlogin()
    except OSError:
        return os.environ.get('USERNAME') or os.environ.get('USER') or ''


BIN_LOCATIONS = {
    BrowserName.CHROME: {
        'linux': ['/usr/bin/google-chrome-stable'],
        'windows': [
            r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe',
            r'C:\Program Files\Google\Chrome\Application\chrome.exe'
        ],
        # Not tested
        'macos': ['/Applications/Google Chrome.app/Contents/MacOS/Google Chrome']
    },
    BrowserName.CHROMIUM: {
        'linux': ['/usr/bin/chromium', '/usr/bin/chromium-browser'],
        'windows': [
            r'C:\Program Files (x86)\Chromium\Application\chrome.exe',
            r'C:\Program Files\Chromium\Application\chrome.exe'
        ],
        # Not tested
        'macos': ['/Applications/Chromium.app/Contents/MacOS/Chromium']
    },
    BrowserName.BRAVE: {
        'linux': ['/usr/bin/brave', '/usr/bin/brave-browser'],
        'windows': [
            r'C:\Program Files (x86)\BraveSoftware\Brave-Browser\Application\brave.exe',
            r'C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe',
            fr'C:\Users\{get_username()}\AppData\Local\BraveSoftware\Brave-Browser\Application\brave.exe'
        ],
        # Not tested
        'macos': ['/Applications/Brave Browser.app/Contents/MacOS/Brave Browser']
    },
    BrowserName.EDGE: {
        'linux': ['/usr/bin/microsoft-edge-stable'],
        'windows': [
            r'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe',
            r'C:\Program Files\Microsoft\Edge\Application\msedge.exe'
        ],
        # Not tested
        'macos': ['/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge']
    },
    BrowserName.FIREFOX: {
        'linux': ['/usr/bin/firefox'],
        'windows': [
            r'C:\Program Files (x86)\Mozilla Firefox\firefox.exe',
            r'C:\Program Files\Mozilla Firefox\firefox.exe'
        ],
        # Not tested
        'macos': ['/Applications/Firefox.app/Contents/MacOS/firefox']
    },
    BrowserName.LIBREWOLF: {
        'linux': ['/usr/bin/librewolf'],
        'windows': [
            r'C:\Program Files (x86)\LibreWolf\librewolf.exe',
            r'C:\Program Files\LibreWolf\librewolf.exe',
            fr'C:\Users\{get_username()}\AppData\Local\LibreWolf\librewolf.exe'
        ],
        # Not tested
        'macos': ['/Applications/LibreWolf.app/Contents/MacOS/LibreWolf']
    },
    BrowserName.OPERA: {
        'linux': ['/usr/bin/opera'],
        'windows': [
            r'C:\Program Files (x86)\Opera\opera.exe',
            r'C:\Program Files\Opera\opera.exe',
            fr'C:\Users\{get_username()}\AppData\Local\Programs\Opera\opera.exe'
        ],
        'macos': ['/Applications/Opera.app/Contents/MacOS/Opera']  # Not tested
    },
    BrowserName.OPERA_GX: {
        'linux': [],
        'windows': [
            r'C:\Program Files (x86)\Opera GX\opera.exe',
            r'C:\Program Files\Opera GX\opera.exe',
            fr'C:\Users\{get_username()}\AppData\Local\Programs\Opera GX\opera.exe'
        ],
        # Not tested
        'macos': ['/Applications/Opera GX.app/Contents/MacOS/Opera GX']
    },
    BrowserName.VIVALDI: {
        'linux': ['/usr/bin/vivaldi-stable'],
        'windows': [
            r'C:\Program Files (x86)\Vivaldi\Application\vivaldi.exe',
            r'C:\Program Files\Vivaldi\Application\vivaldi.exe',
            fr'C:\Users\{get_username()}\AppData\Local\Vivaldi\Application\vivaldi.exe'
        ],
        # Not tested
        'macos': ['/Applications/Vivaldi.app/Contents/MacOS/Vivaldi']
    }
}


class BinaryLocation:
    def __init__(self, raise_not_found=False):
        self.__raise_not_found = raise_not_found
        if sys.platform == 'darwin':
            self.__os = 'macos'
        elif sys.platform.startswith('linux') or 'bsd' in sys.platform.lower():
            self.__os = 'linux'
        elif sys.platform == "win32":
            self.__os = 'windows'
        else:
            raise ValueError('unsupported os')

    def get(self, browser: str) -> str:
        for i in BIN_LOCATIONS[browser][self.__os]:
            if os.path.exists(i):
                logger.info(f'found {browser} binary at: {i}')
                return i
        if self.__raise_not_found:
            raise FileNotFoundError('browser not found')
        logger.warning(f'could not find {browser} binary')