python-script-to-build-an-oracle-or-mysql-flat-file-vault
| rev 11 | rev 12 | ||||
|---|---|---|---|---|---|
| 61 | 61 | ||||
| 62 | print v.getFilename() # generate a valid path and filename from vault | 62 | print v.getFilename() # generate a valid path and filename from vault | ||
| n | 63 | print v.getFilename() # generate a valid path and filename from vault | n | 63 | print v.getFilename( '.jpg' ) # generate a valid path and jpg filename from vau |
| > | lt | ||||
| 64 | 64 | ||||
| 65 | # create vault2 in /var/db 2 directories wide and 5 directories deep | 65 | # create vault2 in /var/db 2 directories wide and 5 directories deep | ||
| 66 | v2 = Vault( path="/var/db", name="vault2", l=5, w=2 ) | 66 | v2 = Vault( path="/var/db", name="vault2", l=5, w=2 ) | ||
| 67 | 67 | ||||
| t | 68 | print v2.getFilename() # generate a valid path and filename from vault | t | 68 | print v2.getFilename( '.mp3' ) # generate a valid path and mp3 filename from va |
| > | ult | ||||
| 69 | print v2.getFilename() # generate a valid path and filename from vault | 69 | print v2.getFilename() # generate a valid path and filename from vault | ||
| 70 | 70 | ||||
| rev 10 | rev 11 | ||||
|---|---|---|---|---|---|
| 50 | ============================== | 50 | ============================== | ||
| 51 | 51 | ||||
| n | 52 | *test_pyvault.py* | n | 52 | *test_pyVault.py* |
| 53 | 53 | ||||
| 54 | .. code-block:: python | 54 | .. code-block:: python | ||
| 55 | 55 | ||||
| n | n | 56 | # import pyVault module | ||
| 56 | from pyvault import Vault | 57 | from pyVault import Vault | ||
| 57 | 58 | ||||
| n | 58 | v = Vault( ) | n | 59 | # create a vault with default settings in the current directory. |
| 60 | v = Vault( ) # create a vault object | ||||
| 59 | 61 | ||||
| n | 60 | print v.getFilename() | n | 62 | print v.getFilename() # generate a valid path and filename from vault |
| 61 | print v.getFilename() | 63 | print v.getFilename() # generate a valid path and filename from vault | ||
| 62 | 64 | ||||
| t | t | 65 | # create vault2 in /var/db 2 directories wide and 5 directories deep | ||
| 63 | v2 = Vault( root="myvault", l=5, w=2 ) | 66 | v2 = Vault( path="/var/db", name="vault2", l=5, w=2 ) | ||
| 64 | 67 | ||||
| 65 | print v2.getFilename() | 68 | print v2.getFilename() # generate a valid path and filename from vault | ||
| 66 | print v2.getFilename() | 69 | print v2.getFilename() # generate a valid path and filename from vault | ||
| 67 | 70 | ||||
| 68 | 71 | ||||
| rev 9 | rev 10 | ||||
|---|---|---|---|---|---|
| 2 | ================================================================ | 2 | ================================================================ | ||
| 3 | 3 | ||||
| n | 4 | This script will build a 64 by 64 flat filesystem. The root directory will be n | n | 4 | This module provides a vault class. This class is useful for creating a flat fi |
| > | amed thevault. | > | lesystem that could be used for storing images, pdfs, mp3, autocad drawings etc. | ||
| 5 | 5 | ||||
| n | 6 | This is useful for storing flatfiles like pictures, pdfs, mp3 or autocad drawing | n | 6 | The meta data about this file system would have to be stored in a database. |
| > | s and then use the database to store metadata about the files. | ||||
| 7 | 7 | ||||
| t | t | 8 | |||
| 9 | |||||
| 8 | *pyvault.py* | 10 | *pyVault.py* | ||
| 9 | 11 | ||||
| 10 | .. code-block:: python | 12 | .. code-block:: python | ||
| rev 8 | rev 9 | ||||
|---|---|---|---|---|---|
| 10 | .. code-block:: python | 10 | .. code-block:: python | ||
| 11 | 11 | ||||
| n | 12 | from os import makedirs | n | 12 | from os import makedirs, path |
| 13 | from random import randrange as r | 13 | from random import randrange as r | ||
| 14 | from uuid import uuid4 | 14 | from uuid import uuid4 | ||
| 15 | 15 | ||||
| 16 | class Vault( object ): | 16 | class Vault( object ): | ||
| n | 17 | def __init__( self, root='thevault', l=65, w=65 ): | n | 17 | def __init__( self, path='', name='vault', l=65, w=65 ): |
| 18 | self.root = root | 18 | self.path = path | ||
| 19 | self.name = name | ||||
| 19 | self.l = l | 20 | self.l = l | ||
| 20 | self.w = w | 21 | self.w = w | ||
| 22 | |||||
| 23 | self.initVault() | ||||
| 21 | 24 | ||||
| n | 22 | self.initVault() | n | 25 | def initVault( self ): |
| 26 | """Build the vault directories if they don't exist""" | ||||
| 27 | p = self.path + '/' + self.name | ||||
| 28 | if path.exists( p ): | ||||
| 29 | pass | ||||
| 30 | else: | ||||
| 31 | for l in range( self.l ): | ||||
| 32 | for w in range( self.w ): | ||||
| 33 | if self.path == '': | ||||
| 34 | makedirs( self.name + '/' + str( l ) + '/' + str( w ) ) | ||||
| 35 | else: | ||||
| 36 | makedirs( self.path + '/' + self.name + '/' + str( l ) | ||||
| > | + '/' + str( w ) ) | ||||
| 23 | 37 | ||||
| n | 24 | def initVault( self ): | n | 38 | def getFilename( self, ext='' ): |
| 25 | """Build the vault directories""" | 39 | """Generate and return a valid unique file path based on vault""" | ||
| 26 | for l in range( self.l ): | 40 | l, w = str( r(self.l) ), str( r(self.w) ) | ||
| 27 | for w in range( self.w ): | 41 | filename = str( uuid4() ) | ||
| 28 | makedirs( self.root + '/' + str( l ) + '/' + str( w ) ) | 42 | |||
| 43 | return self.name + '/' + l + '/' + w + '/' + filename + ext | ||||
| 29 | 44 | ||||
| t | 30 | def getFilename( self ): | t | ||
| 31 | """Generate and return a valid unique file path based on vault""" | ||||
| 32 | l, w = str( r(self.l) ), str( r(self.w) ) | ||||
| 33 | filename = str( uuid4() ) | ||||
| 34 | return self.root + '/' + l + '/' + w + '/' + filename | ||||
| 35 | 45 | ||||
| 36 | 46 | ||||
| rev 7 | rev 8 | ||||
|---|---|---|---|---|---|
| 42 | .. code-block:: python | 42 | .. code-block:: python | ||
| 43 | 43 | ||||
| n | 44 | from pyvault import Vault | n | 44 | from pyvault import Vault |
| 45 | 45 | ||||
| n | 46 | v = Vault( ) | n | 46 | v = Vault( ) |
| 47 | 47 | ||||
| n | 48 | print v.getFilename() | n | 48 | print v.getFilename() |
| 49 | print v.getFilename() | 49 | print v.getFilename() | ||
| 50 | 50 | ||||
| n | 51 | v2 = Vault( root="myvault", l=5, w=2 ) | n | 51 | v2 = Vault( root="myvault", l=5, w=2 ) |
| 52 | 52 | ||||
| n | 53 | print v2.getFilename() | n | 53 | print v2.getFilename() |
| 54 | print v2.getFilename() | 54 | print v2.getFilename() | ||
| 55 | 55 | ||||
| 56 | 56 | ||||
| 74 | 74 | ||||
| 75 | 75 | ||||
| n | 76 | Example algorithm to create file locations | n | ||
| 77 | ======================================================== | ||||
| 78 | |||||
| 79 | .. code-block:: python | ||||
| 80 | |||||
| 81 | from random import randrange as r | ||||
| 82 | from uuid import uuid4 | ||||
| 83 | |||||
| 84 | def makeVaultName(): | ||||
| 85 | """Return a unique file path based on the vault""" | ||||
| 86 | root = "thevault" | ||||
| 87 | filename = uuid4() | ||||
| 88 | return root + '/' + str(r(65)) + '/' + str(r(65)) + '/' + str(filename) | ||||
| 89 | 76 | ||||
| 90 | 77 | ||||
| 91 | 78 | ||||
| t | 92 | t | |||
| 93 | |||||
| 94 | |||||
| rev 6 | rev 7 | ||||
|---|---|---|---|---|---|
| 33 | filename = str( uuid4() ) | 33 | filename = str( uuid4() ) | ||
| 34 | return self.root + '/' + l + '/' + w + '/' + filename | 34 | return self.root + '/' + l + '/' + w + '/' + filename | ||
| t | t | 35 | |||
| 36 | |||||
| 37 | Example pyvault test | ||||
| 38 | ============================== | ||||
| 39 | |||||
| 40 | *test_pyvault.py* | ||||
| 41 | |||||
| 42 | .. code-block:: python | ||||
| 43 | |||||
| 44 | from pyvault import Vault | ||||
| 45 | |||||
| 46 | v = Vault( ) | ||||
| 47 | |||||
| 48 | print v.getFilename() | ||||
| 49 | print v.getFilename() | ||||
| 50 | |||||
| 51 | v2 = Vault( root="myvault", l=5, w=2 ) | ||||
| 52 | |||||
| 53 | print v2.getFilename() | ||||
| 54 | print v2.getFilename() | ||||
| 35 | 55 | ||||
| 36 | 56 | ||||
| rev 5 | rev 6 | ||||
|---|---|---|---|---|---|
| 11 | 11 | ||||
| 12 | from os import makedirs | 12 | from os import makedirs | ||
| n | n | 13 | from random import randrange as r | ||
| 14 | from uuid import uuid4 | ||||
| 13 | 15 | ||||
| n | 14 | root = "thevault" | n | 16 | class Vault( object ): |
| 17 | def __init__( self, root='thevault', l=65, w=65 ): | ||||
| 18 | self.root = root | ||||
| 19 | self.l = l | ||||
| 20 | self.w = w | ||||
| 15 | 21 | ||||
| t | 16 | for i in range( 1, 65 ): | t | 22 | self.initVault() |
| 17 | for j in range( 1, 65 ): | 23 | |||
| 24 | def initVault( self ): | ||||
| 25 | """Build the vault directories""" | ||||
| 26 | for l in range( self.l ): | ||||
| 27 | for w in range( self.w ): | ||||
| 18 | makedirs( root + '/' + str( i ) + '/' + str( j ) ) | 28 | makedirs( self.root + '/' + str( l ) + '/' + str( w ) ) | ||
| 29 | |||||
| 30 | def getFilename( self ): | ||||
| 31 | """Generate and return a valid unique file path based on vault""" | ||||
| 32 | l, w = str( r(self.l) ), str( r(self.w) ) | ||||
| 33 | filename = str( uuid4() ) | ||||
| 34 | return self.root + '/' + l + '/' + w + '/' + filename | ||||
| 35 | |||||
| 19 | 36 | ||||
| 20 | Example database schema to use with vault | 37 | Example database schema to use with vault | ||
| rev 4 | rev 5 | ||||
|---|---|---|---|---|---|
| 45 | from uuid import uuid4 | 45 | from uuid import uuid4 | ||
| 46 | 46 | ||||
| t | t | 47 | def makeVaultName(): | ||
| 48 | """Return a unique file path based on the vault""" | ||||
| 47 | root = "thevault" | 49 | root = "thevault" | ||
| 48 | |||||
| 49 | filename = uuid4() | 50 | filename = uuid4() | ||
| 50 | print root + '/' + str(r(65)) + '/' + str(r(65)) + '/' + str(filename) | 51 | return root + '/' + str(r(65)) + '/' + str(r(65)) + '/' + str(filename) | ||
| 51 | 52 | ||||
| 52 | 53 | ||||
| rev 3 | rev 4 | ||||
|---|---|---|---|---|---|
| 48 | 48 | ||||
| 49 | filename = uuid4() | 49 | filename = uuid4() | ||
| t | 50 | print root + '/' + str(r(65)) + '/' + str(r(65)) + '/' + filename | t | 50 | print root + '/' + str(r(65)) + '/' + str(r(65)) + '/' + str(filename) |
| 51 | 51 | ||||
| 52 | 52 | ||||
| rev 2 | rev 3 | ||||
|---|---|---|---|---|---|
| 18 | makedirs( root + '/' + str( i ) + '/' + str( j ) ) | 18 | makedirs( root + '/' + str( i ) + '/' + str( j ) ) | ||
| 19 | 19 | ||||
| n | n | 20 | Example database schema to use with vault | ||
| 21 | ==================================================== | ||||
| 22 | |||||
| 20 | Then we could use uuids for the actual file names to prevent overwriting or the | 23 | Then we could use uuids for the actual file names to prevent overwriting or the | ||
| > | need to lookup or keep track of names. | > | need to lookup or keep track of names. | ||
| 21 | 24 | ||||
| 34 | 37 | ||||
| 35 | 38 | ||||
| n | n | 39 | Example algorithm to create file locations | ||
| 40 | ======================================================== | ||||
| 41 | |||||
| 42 | .. code-block:: python | ||||
| 43 | |||||
| 44 | from random import randrange as r | ||||
| 45 | from uuid import uuid4 | ||||
| 46 | |||||
| 47 | root = "thevault" | ||||
| 48 | |||||
| 49 | filename = uuid4() | ||||
| 50 | print root + '/' + str(r(65)) + '/' + str(r(65)) + '/' + filename | ||||
| 36 | 51 | ||||
| 37 | 52 | ||||
| t | t | 53 | |||
| 54 | |||||
| 55 | |||||
| 56 | |||||
| rev 1 | rev 2 | ||||
|---|---|---|---|---|---|
| 18 | makedirs( root + '/' + str( i ) + '/' + str( j ) ) | 18 | makedirs( root + '/' + str( i ) + '/' + str( j ) ) | ||
| 19 | 19 | ||||
| n | 20 | I then normally use uuids for the acutal file names to prevent overwriting or th | n | 20 | Then we could use uuids for the actual file names to prevent overwriting or the |
| > | e need to lookup or keep track of names. | > | need to lookup or keep track of names. | ||
| 21 | 21 | ||||
| t | 22 | I then have a database table similar to this: | t | 22 | Below shows an example database schema that could use this vault filesystem: |
| 23 | 23 | ||||
| 24 | .. code-block:: python | 24 | .. code-block:: python | ||
| empty | rev 1 | ||||
|---|---|---|---|---|---|
| t | t | 1 | Python script to build an Oracle or mySQL flat file vault | ||
| 2 | ================================================================ | ||||
| 3 | |||||
| 4 | This script will build a 64 by 64 flat filesystem. The root directory will be n | ||||
| > | amed thevault. | ||||
| 5 | |||||
| 6 | This is useful for storing flatfiles like pictures, pdfs, mp3 or autocad drawing | ||||
| > | s and then use the database to store metadata about the files. | ||||
| 7 | |||||
| 8 | *pyvault.py* | ||||
| 9 | |||||
| 10 | .. code-block:: python | ||||
| 11 | |||||
| 12 | from os import makedirs | ||||
| 13 | |||||
| 14 | root = "thevault" | ||||
| 15 | |||||
| 16 | for i in range( 1, 65 ): | ||||
| 17 | for j in range( 1, 65 ): | ||||
| 18 | makedirs( root + '/' + str( i ) + '/' + str( j ) ) | ||||
| 19 | |||||
| 20 | I then normally use uuids for the acutal file names to prevent overwriting or th | ||||
| > | e need to lookup or keep track of names. | ||||
| 21 | |||||
| 22 | I then have a database table similar to this: | ||||
| 23 | |||||
| 24 | .. code-block:: python | ||||
| 25 | |||||
| 26 | vault | ||||
| 27 | id (int) # auto increment | ||||
| 28 | name (varchar 64) # human readable lookup name | ||||
| 29 | location (varchar 128) # thevault/12/59/28c6104f-cb09-4910-8031-efad22e1ebf9 | ||||
| 30 | filetype (varchar 8) # or possibly another table to keep track of file types | ||||
| > | or possibly add the extension to the uuid filename when saved. | ||||
| 31 | description (text) | ||||
| 32 | |||||
| 33 | Then other tables can refer and relate to this data, like a job table could have | ||||
| > | relations mapped to jpg files and pdf files, and a video of the finished job an | ||||
| > | d an autocad drawing when it was designed. | ||||
| 34 | |||||
| 35 | |||||
| 36 | |||||
| 37 | |||||
Remarkbox