| 
									
										
										
										
											2011-06-04 18:46:25 +02:00
										 |  |  | .. TODO integrate this in commandref and configfile
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-19 21:34:16 +02:00
										 |  |  | .. _packaging-command-hooks:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-01 20:42:49 +02:00
										 |  |  | =============
 | 
					
						
							|  |  |  | Command hooks
 | 
					
						
							|  |  |  | =============
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Packaging provides a way of extending its commands by the use of pre- and
 | 
					
						
							| 
									
										
										
										
											2011-06-19 21:34:16 +02:00
										 |  |  | post-command hooks.  Hooks are Python functions (or any callable object) that
 | 
					
						
							|  |  |  | take a command object as argument.  They're specified in :ref:`config files
 | 
					
						
							|  |  |  | <packaging-config-filenames>` using their fully qualified names.  After a
 | 
					
						
							|  |  |  | command is finalized (its options are processed), the pre-command hooks are
 | 
					
						
							|  |  |  | executed, then the command itself is run, and finally the post-command hooks are
 | 
					
						
							|  |  |  | executed.
 | 
					
						
							| 
									
										
										
										
											2011-06-01 20:42:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-06 01:54:54 +02:00
										 |  |  | See also global setup hooks in :ref:`setupcfg-spec`.
 | 
					
						
							| 
									
										
										
										
											2011-06-04 18:46:25 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-19 21:34:16 +02:00
										 |  |  | .. _packaging-finding-hooks:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Finding hooks
 | 
					
						
							|  |  |  | =============
 | 
					
						
							| 
									
										
										
										
											2011-06-01 20:42:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-19 21:34:16 +02:00
										 |  |  | As a hook is configured with a Python dotted name, it must either be defined in
 | 
					
						
							|  |  |  | a module installed on the system, or in a module present in the project
 | 
					
						
							|  |  |  | directory, where the :file:`setup.cfg` file lives::
 | 
					
						
							| 
									
										
										
										
											2011-06-01 20:42:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-19 21:34:16 +02:00
										 |  |  |   # file: _setuphooks.py
 | 
					
						
							| 
									
										
										
										
											2011-06-01 20:42:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-19 21:34:16 +02:00
										 |  |  |   def hook(install_cmd):
 | 
					
						
							|  |  |  |       metadata = install_cmd.dist.metadata
 | 
					
						
							|  |  |  |       print('Hooked while installing %r %s!' % (metadata['Name'],
 | 
					
						
							|  |  |  |                                                 metadata['Version']))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Then you need to configure it in :file:`setup.cfg`::
 | 
					
						
							| 
									
										
										
										
											2011-06-01 20:42:49 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   [install_dist]
 | 
					
						
							| 
									
										
										
										
											2011-06-19 21:34:16 +02:00
										 |  |  |   pre-hook.a = _setuphooks.hook
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Packaging will add the project directory to :data:`sys.path` and find the
 | 
					
						
							|  |  |  | ``_setuphooks`` module.
 | 
					
						
							| 
									
										
										
										
											2011-06-01 20:42:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-19 21:34:16 +02:00
										 |  |  | Hooks defined in different config files (system-wide, user-wide and
 | 
					
						
							|  |  |  | project-wide) do not override each other as long as they are specified with
 | 
					
						
							|  |  |  | different aliases (additional names after the dot).  The alias in the example
 | 
					
						
							|  |  |  | above is ``a``.
 |