hashit
index
/Users/javad/Dropbox/udvikling/projekter/hashit/hashit/hashit/__init__.py

hashit module for hashit command is contaning all the code for hashit
 
hashit is an hashing application which main purpose is to replace all the 'default'
hashing commands that comes with linux and also provide a usable hashing program
for windows hence the choice of using python. while hashit supports both python 2 and 3
i would strongly recommend using python3 because that python3 comes with a newer version
of hashlib and therefore many new hash-functions, altough it is posible to add these into
python2 with the load() function which acts like a 'connecter' and enables hashit to use
third-party hashing-functions as long as the have the same api as specified in docs/index.md
 
The GLOBAL dict contains all the configurations for this program, translations, error messages
settings, plugins and more.
 
__algorithms__ is a list that contains all the builtin algorithms including crc32
 
LICENSE:
 
    MIT License
 
    Copyright (c) 2020 Javad Shafique
 
    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:
 
    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.
 
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.
 
    NO ONE CAN CLAIM OWNERSHIP OF THIS "SOFTWARE" AND ASSOCIATED DOCUMENTATION FILES.

 
Package Contents
       
__main__
detection
extra
version

 
Classes
       
builtins.object
BSD
SFV

 
class BSD(builtins.object)
    BSD(filename=None, size=False)
 
Parser for bsd and formater, also the
same as SFV() but BSD() instead of sfv uses
the bsd checksum output which is like this:
    hashname (filename) = hash [size]
 
  Methods defined here:
__init__(self, filename=None, size=False)
Inits bsd class with filename and use_size
read(self, filename=None, size=False, reader=None)
Creates generator or uses generator that reads and parses bsd strings

Static methods defined here:
format(file_hash, file_path, hashname)
Formats string in a bsd style format
parser(line, use_size=False)
Parses bsd string

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
class SFV(builtins.object)
    SFV(filename=None, size=False)
 
Class for parsing and creating sfv strings
SFV() contains all functions needed for parsing,
creating and formating SFV strings
 
  Methods defined here:
__init__(self, filename=None, size=False)
Inits sfv class with file and use_size
read(self, filename=None, size=False, reader=None)
Creates generator or uses generator that reads and parses sfv compatible files using reader

Static methods defined here:
format(file_hash, file_path, longest, size='')
calculates the amount of spaces needed in a sfv file
parser(line, use_size=False)

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

 
Functions
       
Exit = exit(...)
exit([status])
 
Exit the interpreter by raising SystemExit(status).
If the status is omitted or None, it defaults to zero (i.e., success).
If the status is an integer, it will be used as the system exit status.
If it is another kind of object, it will be printed and the system
exit status will be one (i.e., failure).
blockIter(afile, blocksize=65536)
Will create a generator for reading a file
check(path, hashit, usecolors=False, be_quiet=False, detecthash=True, sfv=False, size=False, bsdtag=False, strict=False, trace=False, dry_run=False)
Uses check_() to print the error messages and statuses corrent (for CLI)
they are seperated so that you can use the python api, if you so please.
check_files(file_read, hashit, first_line, sfv=False, size=False, bsdtag=False, dry_run=False)
Will read an file which have a SFV compatible checksum-file or a standard one and verify the files checksum
by creating an generator which loops over another generator which parses/reads the file and then it will check
if the hash and optionally the size of the files matches the current state of them. For more info on how this work
see docs/index.md#technical.
choose_hash(hash1, hashit, cli=True)
Uses detect.decect to identify hashes with a high accuracy but when
there if some issues it will take user input. CLI-only
detect_format(hashstr, use_size=False)
Autodetect hash format, by checking the length and what it contains
eprint(*args, **kwargs)
Prints to stderr usefull for warnings and error messages
fixpath(path)
Fixpath converts the releative path into an absolute path
and if needed can append the path to the snap host-filesystem 
which if the application is in devmode gives hashit access to 
the hole filesystem, if you're not in devmode and you're still
using snap, then you will need sudo to access the intire system.
Also replaces / with \ on windows
hashFile(filename, hasher, memory_opt=False)
hashFile is a simple way to hash files using diffrent methods
hashIter(bytesiter, hasher, ashexstr=True)
Will hash the blockIter generator and return digest
load(hashclass)
Add hashes to GLOBAL.EXTRA which is the dict that contains all the "extra"
hash-functions such as Crc32, which allows external hashing algorithms to 
be used as long as the have the same api as specified in docs/README.md
 
returns True/False based on whether or not the data is loaded
load_all(list_of_hashclasses)
Just for it, a function that loads all plugins in a list
new(hashname, data=b'')
Custom hash-init function that returns the hashes
depends on hashlib.new and GLOBAL["EXTRA"]. One of its'
features is it's support for the python3 only shake-hash
scheme were the default hash is shake_256 and the input is
taken like this:
    shake_[amount of output]
reader(filename, mode='r', comments=True, newlines=False)
Creates generator for a file or stdin, better for larger files not part of the MEMOPT,
so an standard reader for most uses. Works like readlines but instead of a list it
creates an generator that sortof clean the input before it is parsed by something like
BSD() or SFV().
supports_color()
Returns True if the running system's terminal supports color, and False
otherwise.

 
Data
        GLOBAL = {'ACCESS': True, 'BLANK': (None, True, False), 'COLORS': {'GREEN': '\x1b[0;32m', 'RED': '\x1b[0;31m', 'RESET': '\x1b[0m', 'YELLOW': '\x1b[0;33m'}, 'DEFAULTS': {'APPEND': False, 'COLORS': True, 'DETECT': False, 'DRYRUN': False, 'HASH': 'md5', 'MEMOPT': False, 'QUIET': False, 'RECURS': False, 'SIZE': False, 'STRICT': False, ...}, 'DEVMODE': True, 'ERRORS': {'FileNotFoundError': "Error, file seems to be missing calling systemd to confirm 'sure you haved checked the MBR?'", 'IndexError': 'Out of range, cause i am not that big :)', 'OSError': {'END': 'JDK, so something happend with your os, message: ', 'linux': 'So {} , to be continued...\n', 'macos': 'Macos (Sierra+) and OSX (El Captain-) thank god for apples naming', 'windows': 'Windows 10, windows 8(.1), windows 7 (sp*), wind...p*), windows 98/95, windows NT *. OK not that bad'}, 'TypeError': 'Wrong type used (in cli-arguments) - please use a static programming language', 'ValueError': 'Wrong type or mood?! :)'}, 'EXTRA': {'crc32': <class 'hashit.extra.Crc32'>}, 'HASH_STR': 'Hello World!', 'IF_NO_ARGS': ['--string'], 'MESSAGES': {'CUR_FORM': 'current format is', 'DRYRUN_NOT': 'Does not support --dry-run', 'EMPTY_CHK': 'checksum file is empty', 'FAIL': 'FAILED', 'FILE_NOT': 'File does not exist', 'HASH_NOT': 'is not a valid hash', 'LENGTH_NOT': 'The files does not have the same length', 'LOAD_FAIL': 'Failed to load', 'MAYBE': 'Maybe', 'MAYBE_M': 'Did you maybe mean:', ...}, ...}
__algorithms__ = ['md5', 'sha1', 'crc32', 'sha256', 'sha384', 'sha512', 'sha224', 'blake2b', 'blake2s', 'sha3_224', 'sha3_384', 'sha3_512', 'sha3_256']
__help__ = 'Hashit is an hashing program which can be uses t...ot the idea to make such a program using\npython.\n'
__license__ = 'MIT, Copyright (c) 2017-2020 Javad Shafique'
print_function = _Feature((2, 6, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 65536)
with_statement = _Feature((2, 5, 0, 'alpha', 1), (2, 6, 0, 'alpha', 0), 32768)

 
Author
        Javad Shafique