p3lib 1.1.101__py3-none-any.whl → 1.1.102__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,132 @@
1
+ #!/bin/env python3
2
+
3
+ import os
4
+ import sys
5
+ import platform
6
+
7
+ class GnomeDesktopApp(object):
8
+ """@brief Responsible for adding and removing gnome desktop files for launching applications on a Linux system."""
9
+
10
+ @staticmethod
11
+ def IsLinux():
12
+ """@return True if running on a Linux platform."""
13
+ linux = False
14
+ if platform.system() == "Linux":
15
+ linux = True
16
+ return linux
17
+
18
+ def __init__(self, icon_file, app_name=None, comment='', categories='Utility;Application;'):
19
+ """@brief Constructor.
20
+ @param icon_file The name of the icon file. This can be an absolute file name the filename on it's own.
21
+ If just a filename is passed then the icon file must sit in a folder named 'assets'.
22
+ This assets folder must be in the same folder as the startup file or it's parent.
23
+ @param app_name The name of the application.
24
+ If not defined then the name of the program executed at startup is used.
25
+ This name has _ and - character replace with space characters and each
26
+ word starts with a capital letter.
27
+ @param comment This comment should detail what the program does and is stored
28
+ in the gnome desktop file that is created.
29
+ @param categories The debian app categories. default='Utility;Application;'.
30
+ """
31
+ if not GnomeDesktopApp.IsLinux():
32
+ raise Exception("The GnomeDesktopApp() class cannot be instantiated on a non Linux platform")
33
+ self._startup_file = self._get_startup_file()
34
+ self._gnome_desktop_file = None
35
+ self._app_name = self._get_app_name()
36
+ self._check_icon(icon_file)
37
+ self._comment = comment
38
+ self._categories = categories
39
+ self._gnome_desktop_file = self._get_gnome_desktop_file()
40
+
41
+ def _get_startup_file(self):
42
+ """@return Get the abs name of the program first started."""
43
+ return os.path.abspath(sys.argv[0])
44
+
45
+ def _get_app_name(self, app_name=None):
46
+ """@brief Get the name of the app.
47
+ @param app_name The name of the app or None. If None then the name of the app is the
48
+ basename of the startup file minus it's extension.
49
+ @return The name of the app."""
50
+ if not app_name:
51
+ # Get just the name of the file
52
+ app_name = os.path.basename(self._startup_file)
53
+ # Remove file extension
54
+ app_name = os.path.splitext(app_name)[0]
55
+ app_name = app_name.replace('_', ' ')
56
+ app_name = app_name.replace('-', ' ')
57
+ app_name = app_name.title()
58
+ return app_name
59
+
60
+ def _check_icon(self, icon_file):
61
+ """@brief Check that the icon file exists as this is required for the gnome desktop entry.
62
+ @param icon_file The name of the icon file.
63
+ return None"""
64
+ self._abs_icon_file = os.path.abspath(icon_file)
65
+ if not os.path.isfile(self._abs_icon_file):
66
+ startup_path = os.path.dirname(self._startup_file)
67
+ path1 = os.path.join(startup_path, 'assets')
68
+ self._abs_icon_file = os.path.join(path1, icon_file)
69
+ if not os.path.isfile(self._abs_icon_file):
70
+ startup_parent_path = os.path.join(startup_path, '..')
71
+ path2 = os.path.join(startup_parent_path, 'assets')
72
+ self._abs_icon_file = os.path.join(path2, icon_file)
73
+ if not os.path.isfile(self._abs_icon_file):
74
+ raise Exception(f"{self._app_name} icon file ({icon_file}) not found.")
75
+
76
+ def _get_gnome_desktop_file(self):
77
+ """@brief Determine and return the name of the gnome desktop file.
78
+ @return The gnome desktop file."""
79
+ # Get just the name of the file
80
+ desktop_file_name = os.path.basename(self._startup_file)
81
+ # Remove file extension
82
+ desktop_file_name = os.path.splitext(desktop_file_name)[0]
83
+ if not desktop_file_name.endswith('.desktop'):
84
+ desktop_file_name = desktop_file_name + '.desktop'
85
+ home_folder = os.path.expanduser("~")
86
+ gnome_desktop_apps_folder = os.path.join(home_folder, '.local/share/applications')
87
+ gnome_desktop_file = os.path.join(gnome_desktop_apps_folder, desktop_file_name)
88
+ return gnome_desktop_file
89
+
90
+ def _create_gnome_desktop_file(self):
91
+ """@brief Create the gnome desktop file for this app."""
92
+ if os.path.isfile(self._gnome_desktop_file):
93
+ raise Exception(f"{self._gnome_desktop_file} file already exists.")
94
+ lines = []
95
+ lines.append('[Desktop Entry]')
96
+ lines.append('Version=1.0')
97
+ lines.append('Type=Application')
98
+ lines.append('Encoding=UTF-8')
99
+ lines.append(f'Name={self._app_name}')
100
+ lines.append(f'Comment={self._comment}')
101
+ lines.append(f'Icon={self._abs_icon_file}')
102
+ lines.append(f'Exec=python3 {self._startup_file}')
103
+ lines.append('Terminal=false')
104
+ lines.append(f'Categories={self._categories}')
105
+
106
+ with open(self._gnome_desktop_file, "w", encoding="utf-8") as fd:
107
+ fd.write("\n".join(lines))
108
+
109
+ def create(self, overwrite=False):
110
+ """@brief Create a desktop icon.
111
+ @param overwrite If True overwrite any existing file. If False raise an error if the file is already present."""
112
+ # If this file not found error
113
+ if not os.path.isfile(self._startup_file):
114
+ raise Exception(f"{self._startup_file} file not found.")
115
+ if overwrite:
116
+ self.delete()
117
+ self._create_gnome_desktop_file()
118
+
119
+ def delete(self):
120
+ """@brief Delete the gnome desktop file if present"""
121
+ if os.path.isfile(self._gnome_desktop_file):
122
+ os.remove(self._gnome_desktop_file)
123
+
124
+ """
125
+ Example usage
126
+ gda = GnomeDesktopApp('savings.png')
127
+ gda.create(overwrite=True)
128
+ """
129
+
130
+
131
+
132
+
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: p3lib
3
- Version: 1.1.101
3
+ Version: 1.1.102
4
4
  Summary: A group of python modules for networking, plotting data, config storage, automating boot scripts, ssh access and user input output.
5
5
  Home-page: https://github.com/pjaos/p3lib
6
6
  Author: Paul Austen
@@ -6,6 +6,7 @@ p3lib/boot_manager.py,sha256=l7WlaoIRt4cu2jAdCs3FnDeNO2v2jzqideNZ3qg2r_4,19652
6
6
  p3lib/conduit.py,sha256=jPkjdtyCx2I6SFqcEo8y2g7rgnZ-jNY7oCuYIETzT5Q,6046
7
7
  p3lib/database_if.py,sha256=XKu1w3zftGbj4Rh54wrWJnoCtqHkhCzJUPN2S70XIKg,11915
8
8
  p3lib/file_io.py,sha256=A7_GKYPlmjRjq6U1YuWhmB0OhLhNm6cWQfQX8qfgYTk,5041
9
+ p3lib/gnome_desktop_app.py,sha256=28DKBDyyr7Dj4rSGvtUOBfhepdB7TEmsO0mNyuPY4K4,6002
9
10
  p3lib/helper.py,sha256=xTKPgpziwr4zyaoc0sjZRFr0M91fo7Tok_nSAvtiTZE,12020
10
11
  p3lib/json_networking.py,sha256=6u4s1SmypjTYPnSxHP712OgQ3ZJaxOqIkgHQ1J7Qews,9738
11
12
  p3lib/mqtt_rpc.py,sha256=6LmFA1kR4HSJs9eWbOJORRHNY01L_lHWjvtE2fmY8P8,10511
@@ -16,8 +17,8 @@ p3lib/pconfig.py,sha256=2yZUK5nkqpAm4Y_xcJq5H9Lxmc8dfYei1Pi0Ek2Crh0,35376
16
17
  p3lib/ssh.py,sha256=OyoAQ_h1L2RfkjTAChDrvLFfl4Fe_gBNdX5rvK-wKiw,42125
17
18
  p3lib/table_plot.py,sha256=RPncwVlGUkkx5Fw0dHQedXo0TSPlTi__VrJBDzaMsuI,32116
18
19
  p3lib/uio.py,sha256=Aaxc99XiE3d2f9vLjaN-bZsckoNxay5t0ujdK6PXGrw,23265
19
- p3lib-1.1.101.dist-info/LICENSE,sha256=igqTy5u0kVWM1n-NUZMvAlinY6lVjAXKoag0okkS8V8,1067
20
- p3lib-1.1.101.dist-info/METADATA,sha256=gdbF0zh48zjUc6LXovhTgsfcFldo1mzLJBClcS9iJL4,919
21
- p3lib-1.1.101.dist-info/WHEEL,sha256=A3WOREP4zgxI0fKrHUG8DC8013e3dK3n7a6HDbcEIwE,91
22
- p3lib-1.1.101.dist-info/top_level.txt,sha256=SDCpXYh-19yCFp4Z8ZK4B-3J4NvTCJElZ42NPgcR6-U,6
23
- p3lib-1.1.101.dist-info/RECORD,,
20
+ p3lib-1.1.102.dist-info/LICENSE,sha256=igqTy5u0kVWM1n-NUZMvAlinY6lVjAXKoag0okkS8V8,1067
21
+ p3lib-1.1.102.dist-info/METADATA,sha256=zZYfEUvcBThnWJPLgVeK3lIulUngLupoWwlQ7bfAdl8,919
22
+ p3lib-1.1.102.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
23
+ p3lib-1.1.102.dist-info/top_level.txt,sha256=SDCpXYh-19yCFp4Z8ZK4B-3J4NvTCJElZ42NPgcR6-U,6
24
+ p3lib-1.1.102.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.7.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5