Skip to content

Commit 80f4720

Browse files
Alexander Bessmanbessman
authored andcommitted
Don't install udev rules automatically
1 parent aa6d586 commit 80f4720

File tree

2 files changed

+38
-79
lines changed

2 files changed

+38
-79
lines changed

PSL/packet_handler.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
>>> device.disconnect()
99
"""
1010
import logging
11+
import os.path
12+
import platform
1113
import struct
1214
import time
1315
from functools import partial
@@ -42,6 +44,7 @@ def __init__(
4244
timeout: float = 1.0,
4345
**kwargs, # Backward compatibility
4446
):
47+
self._check_udev()
4548
self.burst_buffer = b""
4649
self.load_burst = False
4750
self.input_queue_size = 0
@@ -71,6 +74,25 @@ def __init__(
7174
self.portname = self.interface.name
7275
self.listPorts = self._list_ports
7376

77+
@staticmethod
78+
def _check_udev():
79+
if platform.system() == "Linux":
80+
udev_paths = [
81+
"/run/udev/rules.d/",
82+
"/etc/udev/rules.d/",
83+
"/lib/udev/rules.d/",
84+
]
85+
for p in udev_paths:
86+
udev_rules = os.path.join(p, "99-pslab.rules")
87+
if os.path.isfile(udev_rules):
88+
break
89+
else:
90+
e = (
91+
"A udev rule must be installed to access the PSLab. "
92+
+ "Please copy 99-pslab.rules to /etc/udev/rules.d/."
93+
)
94+
raise OSError(e)
95+
7496
@staticmethod
7597
def _list_ports() -> List[str]: # Promote to public?
7698
"""Return a list of serial port names."""

setup.py

Lines changed: 16 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,21 @@
1-
from distutils.cmd import Command
2-
from distutils.util import execute
3-
import os
4-
import platform
5-
import shutil
6-
from subprocess import call
7-
import warnings
1+
import setuptools
82

9-
from setuptools import setup, find_packages
10-
from setuptools.command.develop import develop
11-
from setuptools.command.install import install
123

4+
with open("README.md", "r") as fh:
5+
long_description = fh.read()
136

14-
def udev_reload_rules():
15-
call(["udevadm", "control", "--reload-rules"])
16-
17-
18-
def udev_trigger():
19-
call( # nosec
20-
[
21-
"udevadm",
22-
"trigger",
23-
"--subsystem-match=usb",
24-
"--attr-match=idVendor=04d8",
25-
"--action=add",
26-
]
27-
)
28-
29-
30-
def install_udev_rules():
31-
shutil.copy("99-pslab.rules", "/lib/udev/rules.d")
32-
execute(udev_reload_rules, [], "Reloading udev rules")
33-
execute(udev_trigger, [], "Triggering udev rules")
34-
35-
36-
def check_root():
37-
return os.geteuid() == 0
38-
39-
40-
class CustomInstall(install):
41-
def run(self):
42-
install.run(self)
43-
self.run_command("udev")
44-
45-
46-
class CustomDevelop(develop):
47-
def run(self):
48-
develop.run(self)
49-
try:
50-
self.run_command("udev")
51-
except OSError as e:
52-
warnings.warn(e)
53-
54-
55-
class InstallUdevRules(Command):
56-
description = "install udev rules (requires root privileges)."
57-
user_options = []
58-
59-
def initialize_options(self):
60-
pass
61-
62-
def finalize_options(self):
63-
pass
64-
65-
def run(self):
66-
if platform.system() == "Linux":
67-
if check_root():
68-
install_udev_rules()
69-
else:
70-
msg = "You must have root privileges to install udev rules."
71-
raise OSError(msg)
72-
73-
74-
setup(
75-
name="PSL",
76-
version="1.1.0",
7+
setuptools.setup(
8+
name="pslab",
9+
version="2.0.0.dev2",
7710
description="Pocket Science Lab by FOSSASIA",
11+
long_description=long_description,
12+
long_description_content_type="text/markdown",
7813
author="FOSSASIA PSLab Developers",
7914
author_email="pslab-fossasia@googlegroups.com",
8015
url="https://pslab.io/",
8116
install_requires=["numpy>=1.16.3", "pyserial>=3.4", "scipy>=1.3.0"],
82-
packages=find_packages(exclude=("tests",)),
17+
python_requires=">=3.6",
18+
packages=setuptools.find_packages(exclude=("tests",)),
8319
package_data={
8420
"": [
8521
"*.css",
@@ -95,9 +31,10 @@ def run(self):
9531
"99-pslab.rules",
9632
]
9733
},
98-
cmdclass={
99-
"develop": CustomDevelop,
100-
"install": CustomInstall,
101-
"udev": InstallUdevRules,
102-
},
34+
classifiers=[
35+
"Programming Language :: Python :: 3",
36+
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
37+
"Operating System :: OS Independent",
38+
"Development Status :: 4 - Beta",
39+
],
10340
)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy