Feedback on my first Python module - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: General (https://python-forum.io/forum-1.html) +--- Forum: Code sharing (https://python-forum.io/forum-5.html) +--- Thread: Feedback on my first Python module (/thread-10985.html) Pages:
1
2
|
Feedback on my first Python module - CodeRaker - Jun-16-2018 Hi there Pyople , I'm developing my first python module intended to assist with writing (for now) Ubuntu server administration scripts. I'm not trying to invent the new Ansible - rather just learning to write a module and help shorten my administration scripts, by creating a generic module. The code is here: https://github.com/CodeRaker/automation The module works. However I'm wondering if the module structure, the way I built the functions and so on is aligned with the Python way. I'ld like some pointers to improve/optimize the code. If anyone would be so kind to provide some feedback. Sincerily, Peter (CodeRaker) RE: Feedback on my first Python module - Larz60+ - Jun-16-2018 There is a trick you can use to change any value to True or false: λ python Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> x = 'Hello' >>> not not x True >>> x = 0 >>> not not x False >>>so when you write a statement like: if result == 0: return True else: return Falseit can be shortened to: return not not resultwhich will return True or False RE: Feedback on my first Python module - ichabod801 - Jun-16-2018 Why not just use: return bool(result)? RE: Feedback on my first Python module - CodeRaker - Jun-16-2018 (Jun-16-2018, 12:55 PM)Larz60+ Wrote: There is a trick you can use to change any value to True or false:λ python Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> x = 'Hello' >>> not not x True >>> x = 0 >>> not not x False >>>so when you write a statement like:if result == 0: return True else: return Falseit can be shortened to:return not not resultwhich will return True or False Pretty cool. I had to write return not resultin order for it to write True on 0 and False on any other number. Thanks for the contribution! Updated the module :) RE: Feedback on my first Python module - buran - Jun-16-2018 @Larz - only one not will do@ichabood - you need not :-) def larz(result): return not not result def code_raker(result): if result == 0: return True else: return False def ichabood(result): return bool(result) print('x==0') x=0 print('CodeRaker: {}'.format(code_raker(x))) print('Larz: {}'.format(larz(x))) print('Ichabood: {}'.format(ichabood(x))) print('\nx==1') x=1 print('CodeRaker: {}'.format(code_raker(x))) print('Larz: {}'.format(larz(x))) print('Ichabood: {}'.format(ichabood(x)))
RE: Feedback on my first Python module - CodeRaker - Jun-16-2018 (Jun-16-2018, 02:36 PM)ichabod801 Wrote: Why not just use:return bool(result)? In order for it to work I would have to write return not bool(result)So I chose the shorter version by Lars60+. Both ways much more clever than my initial approach. Thanks :) RE: Feedback on my first Python module - buran - Jun-16-2018 some random thoughts: 1. do not do if verbose == True: . verbose is already True or False, so just do if verbose: 2. All this if action == 'restart': run_command('systemctl restart ' + service, systemctl_verbose) if verbose == True: print('[V] Restarting service: ' + service) if action == 'start': run_command('systemctl start ' + service, systemctl_verbose) if verbose == True: print('[V] Starting service: ' + service) if action == 'stop': run_command('systemctl stop ' + service, systemctl_verbose) if verbose == True: print('[V] Stopping service: ' + service) if action == 'reload': run_command('systemctl reload ' + service, systemctl_verbose) if verbose == True: print('[V] Reloading service: ' + service)could be just run_command('systemctl {} {}'.format(action, service), systemctl_verbose) if verbose: print('[V] {} service: {}'.format(action.capitalize(), service)) 3. this with open(path) as infile: with open(path + '.new', 'w') as outfile:can be on one line, to reduce indentation levels with open(path) as infile, open(path + '.new', 'w') as outfile: RE: Feedback on my first Python module - CodeRaker - Jun-16-2018 (Jun-16-2018, 03:43 PM)buran Wrote: could be justrun_command('systemctl {} {}'.format(action, service), systemctl_verbose) if verbose: print('[V] {} service: {}'.format(action.capitalize() + service)) Wow! Thanks for that. Whipped by the pythonic slapstick! Just had to change + to , in print('[V] {} service: {}'.format(action.capitalize() + service))then it works perfectly. Module has been updated. Awesome :) RE: Feedback on my first Python module - buran - Jun-16-2018 (Jun-16-2018, 04:14 PM)CodeRaker Wrote: Just had to change + to , inyes, sorry for the mistake. I updated it shortly after the post RE: Feedback on my first Python module - snippsat - Jun-16-2018 Some use of string formatting but could be more,not so nice + ' ' + .f-string makes it a lot nicer,that will of course make it 3.6 only.if that's no problem then use f-string. # You run_command('mv ' + path + ' ' + path + '.old') # f-string run_command(f'mv {path} {path}.old') # format() <-- 3.5 run_command('mv {0} {1}.old'.format(path, path)) with open() can be written in one statement,some like this as some not.with open(path) as infile,open(f'{path}.new', 'w') as outfile: ... |