Source documentation

almir – Main package

almir.forms – HTML forms definitions

class almir.forms.JobSchema(*arg, **kw)[source]

Bases: colander.Schema

class almir.forms.LogSchema(*arg, **kw)[source]

Bases: colander.Schema

class almir.forms.MediaSchema(*arg, **kw)[source]

Bases: colander.Schema

almir.forms.deferred_widget_factory(values_name)[source]

almir.meta – Configuration for models

class almir.meta.ModelMixin[source]

Bases: object

static format_byte_size(size)[source]
classmethod get_list(**kw)[source]
classmethod get_one(id_=None, query=None)[source]
query = None
static render_distance_of_time_in_words(dt_from, dt_to=None)[source]
almir.meta.get_database_size(engine)[source]

Returns human formatted SQL database size.

Example: 3.04 GB

almir.meta.initialize_sql(settings)[source]

almir.models – SQLAlchemy models

Models generated from bacula-dir-postgresql 5.0.2

class almir.models.Client(**kwargs)[source]

Bases: almir.meta.ModelMixin, sqlalchemy.ext.declarative.api.Base

Column | Type | Modifiers
—————+———-+———————————————————–
clientid | integer | not null default nextval(‘client_clientid_seq’::regclass) name | text | not null uname | text | not null autoprune | smallint | default 0 fileretention | bigint | default 0 jobretention | bigint | default 0
Indexes:
“client_pkey” PRIMARY KEY, btree (clientid) “client_name_idx” UNIQUE, btree (name)
classmethod get_list(**kw)[source]
render_autoprune(request)[source]
render_fileretention(request)[source]
render_jobretention(request)[source]
render_name(request)[source]
url(request)[source]
class almir.models.File(**kwargs)[source]

Bases: almir.meta.ModelMixin, sqlalchemy.ext.declarative.api.Base

Column | Type | Modifiers
————+———+——————————————————-
fileid | bigint | not null default nextval(‘file_fileid_seq’::regclass) fileindex | integer | not null default 0 jobid | integer | not null pathid | integer | not null filenameid | integer | not null markid | integer | not null default 0 lstat | text | not null md5 | text | not null
Indexes:
“file_pkey” PRIMARY KEY, btree (fileid) “file_jobid_idx” btree (jobid) “file_jpfid_idx” btree (jobid, pathid, filenameid)
filename
get_stat_data()[source]
path
render_filename(request)[source]
render_gid(request)[source]
render_mode(request)[source]
render_size(request)[source]
render_uid(request)[source]
class almir.models.FileSet(**kwargs)[source]

Bases: almir.meta.ModelMixin, sqlalchemy.ext.declarative.api.Base

Column | Type | Modifiers
————+—————————–+————————————————————-
filesetid | integer | not null default nextval(‘fileset_filesetid_seq’::regclass) fileset | text | not null md5 | text | not null createtime | timestamp without time zone | not null
Indexes:
“fileset_pkey” PRIMARY KEY, btree (filesetid) “fileset_name_idx” btree (fileset)
createtime = Column('createtime', BaculaDateTime(), table=<FileSet>)
class almir.models.Filename(**kwargs)[source]

Bases: almir.meta.ModelMixin, sqlalchemy.ext.declarative.api.Base

Column | Type | Modifiers
————+———+—————————————————————
filenameid | integer | not null default nextval(‘filename_filenameid_seq’::regclass) name | text | not null
Indexes:
“filename_pkey” PRIMARY KEY, btree (filenameid) “filename_name_idx” btree (name)
class almir.models.Job(**kwargs)[source]

Bases: almir.meta.ModelMixin, sqlalchemy.ext.declarative.api.Base

Column | Type | Modifiers
—————–+—————————–+—————————————————–
jobid | integer | not null default nextval(‘job_jobid_seq’::regclass) job | text | not null name | text | not null type | character(1) | not null level | character(1) | not null clientid | integer | default 0 jobstatus | character(1) | not null schedtime | timestamp without time zone | starttime | timestamp without time zone | endtime | timestamp without time zone | realendtime | timestamp without time zone | jobtdate | bigint | default 0 volsessionid | integer | default 0 volsessiontime | integer | default 0 jobfiles | integer | default 0 jobbytes | bigint | default 0 readbytes | bigint | default 0 joberrors | integer | default 0 jobmissingfiles | integer | default 0 poolid | integer | default 0 filesetid | integer | default 0 priorjobid | integer | default 0 purgedfiles | smallint | default 0 hasbase | smallint | default 0 hascache | smallint | default 0 reviewed | smallint | default 0 comment | text |
Indexes:
“job_pkey” PRIMARY KEY, btree (jobid) “job_name_idx” btree (name)
client
endtime = Column('endtime', BaculaDateTime(), table=<Job>)
files
classmethod get_last()[source]
classmethod get_list(**kw)[source]
classmethod get_one(id_)[source]
classmethod get_running()[source]
classmethod get_upcoming()[source]
jobmedias
logs
pool
realendtime = Column('realendtime', BaculaDateTime(), table=<Job>)
render_client_name(request)[source]
render_duration(request)[source]
render_jobbytes(request)[source]
render_joberrors(request)[source]
render_jobfiles(request)[source]
render_level(request)[source]
render_name(request)[source]
render_pool_name(request)[source]
render_starttime(request)[source]
render_status(request)[source]
render_status_color(request)[source]

Color of the job depending on status

render_type(request)[source]
render_volume_name(request)[source]
schedtime = Column('schedtime', BaculaDateTime(), table=<Job>)
starttime = Column('starttime', BaculaDateTime(), table=<Job>)
status
url(request)[source]
class almir.models.JobMedia(**kwargs)[source]

Bases: almir.meta.ModelMixin, sqlalchemy.ext.declarative.api.Base

Column | Type | Modifiers
————+———+—————————————————————
jobmediaid | integer | not null default nextval(‘jobmedia_jobmediaid_seq’::regclass) jobid | integer | not null mediaid | integer | not null firstindex | integer | default 0 lastindex | integer | default 0 startfile | integer | default 0 endfile | integer | default 0 startblock | bigint | default 0 endblock | bigint | default 0 volindex | integer | default 0
Indexes:
“jobmedia_pkey” PRIMARY KEY, btree (jobmediaid) “job_media_job_id_media_id_idx” btree (jobid, mediaid)
medias
class almir.models.Log(**kwargs)[source]

Bases: almir.meta.ModelMixin, sqlalchemy.ext.declarative.api.Base

Column | Type | Modifiers
———+—————————–+—————————————————–
logid | integer | not null default nextval(‘log_logid_seq’::regclass) jobid | integer | not null time | timestamp without time zone | logtext | text | not null
Indexes:
“log_pkey” PRIMARY KEY, btree (logid) “log_name_idx” btree (jobid)
classmethod get_list(**kw)[source]
render_jobid(request)[source]
render_logtext(request)[source]
render_time(request)[source]
time = Column('time', BaculaDateTime(), table=<Log>)
class almir.models.Media(**kwargs)[source]

Bases: almir.meta.ModelMixin, sqlalchemy.ext.declarative.api.Base

Column | Type | Modifiers
——————+—————————–+———————————————————
actiononpurge | smallint | default 0 comment | text | deviceid | integer | default 0 enabled | smallint | default 1 endblock | bigint | default 0 endfile | integer | default 0 firstwritten | timestamp without time zone | inchanger | smallint | default 0 initialwrite | timestamp without time zone | labeldate | timestamp without time zone | labeltype | integer | default 0 lastwritten | timestamp without time zone | locationid | integer | default 0 maxvolbytes | bigint | default 0 maxvolfiles | integer | default 0 maxvoljobs | integer | default 0 mediaaddressing | smallint | default 0 mediaid | integer | not null default nextval(‘media_mediaid_seq’::regclass) mediatypeid | integer | default 0 mediatype | text | not null poolid | integer | default 0 recyclecount | integer | default 0 recyclepoolid | integer | default 0 recycle | smallint | default 0 scratchpoolid | integer | default 0 slot | integer | default 0 storageid | integer | default 0 volblocks | integer | default 0 volbytes | bigint | default 0 volcapacitybytes | bigint | default 0 volerrors | integer | default 0 volfiles | integer | default 0 voljobs | integer | default 0 volmounts | integer | default 0 volparts | integer | default 0 volreadtime | bigint | default 0 volretention | bigint | default 0 volstatus | text | not null volumename | text | not null voluseduration | bigint | default 0 volwrites | integer | default 0 volwritetime | bigint | default 0
Indexes:
“media_pkey” PRIMARY KEY, btree (mediaid) “media_volumename_id” UNIQUE, btree (volumename)
Check constraints:
“media_volstatus_check” CHECK (volstatus = ANY (ARRAY[‘Full’::text, ‘Archive’::text, ‘Append’::text, ‘Recycle’::text, ‘Purged’::text, ‘Read-Only’::text, ‘Disabled’::text, ‘Error’::text, ‘Busy’::text, ‘Used’::text, ‘Cleaning’::text, ‘Scratch’::text]))
firstwritten = Column('firstwritten', BaculaDateTime(), table=<Media>)
classmethod get_list(**kw)[source]
classmethod get_one(id_)[source]
initialwrite = Column('initialwrite', BaculaDateTime(), table=<Media>)
jobs
labeldate = Column('labeldate', BaculaDateTime(), table=<Media>)
lastwritten = Column('lastwritten', BaculaDateTime(), table=<Media>)
pool
render_enabled(request)[source]
render_expires(request)[source]
render_maxvolbytes(request)[source]
render_pool_name(request)[source]
render_recycle(request)[source]
render_storage_name(request)[source]
render_volbytes(request)[source]
render_volcapacitybytes(request)[source]
render_volretention(request)[source]
render_volstatus(request)[source]
render_volumename(request)[source]
storage
url(request)[source]
class almir.models.Path(**kwargs)[source]

Bases: almir.meta.ModelMixin, sqlalchemy.ext.declarative.api.Base

Column | Type | Modifiers
——–+———+——————————————————-
pathid | integer | not null default nextval(‘path_pathid_seq’::regclass) path | text | not null
Indexes:
“path_pkey” PRIMARY KEY, btree (pathid) “path_name_idx” btree (path)
class almir.models.Pool(**kwargs)[source]

Bases: almir.meta.ModelMixin, sqlalchemy.ext.declarative.api.Base

Column | Type | Modifiers
——————–+———-+——————————————————-
acceptanyvolume | smallint | default 0 actiononpurge | smallint | default 0 autoprune | smallint | default 0 enabled | smallint | default 1 labelformat | text | not null labeltype | integer | default 0 maxvolbytes | bigint | default 0 maxvolfiles | integer | default 0 maxvoljobs | integer | default 0 maxvols | integer | default 0 migrationhighbytes | bigint | default 0 migrationlowbytes | bigint | default 0 migrationtime | bigint | default 0 name | text | not null nextpoolid | integer | default 0 numvols | integer | default 0 poolid | integer | not null default nextval(‘pool_poolid_seq’::regclass) pooltype | text | recyclepoolid | integer | default 0 recycle | smallint | default 0 scratchpoolid | integer | default 0 usecatalog | smallint | default 0 useonce | smallint | default 0 volretention | bigint | default 0 voluseduration | bigint | default 0
Indexes:
“pool_pkey” PRIMARY KEY, btree (poolid) “pool_name_idx” btree (name)
Check constraints:
“pool_pooltype_check” CHECK (pooltype = ANY (ARRAY[‘Backup’::text, ‘Copy’::text, ‘Cloned’::text, ‘Archive’::text, ‘Migration’::text, ‘Scratch’::text]))
classmethod get_one(id_)[source]
classmethod get_values()[source]
render_acceptanyvolume(request)[source]
render_autoprune(request)[source]
render_enabled(request)[source]
render_name(request)[source]
render_recycle(request)[source]
render_usecatalog(request)[source]
render_useonce(request)[source]
url(request)[source]
class almir.models.Status(**kwargs)[source]

Bases: almir.meta.ModelMixin, sqlalchemy.ext.declarative.api.Base

Column | Type | Modifiers
—————+————–+———–
jobstatus | character(1) | not null jobstatuslong | text | severity | integer |
Indexes:
“status_pkey” PRIMARY KEY, btree (jobstatus)
classmethod get_values()[source]
class almir.models.Storage(**kwargs)[source]

Bases: almir.meta.ModelMixin, sqlalchemy.ext.declarative.api.Base

Column | Type | Modifiers
————-+———+————————————————————-
storageid | integer | not null default nextval(‘storage_storageid_seq’::regclass) name | text | not null autochanger | integer | default 0
Indexes:
“storage_pkey” PRIMARY KEY, btree (storageid)
classmethod get_list(**kw)[source]
classmethod get_one(id_)[source]
classmethod get_values()[source]
render_autochanger(request)[source]
render_name(request)[source]
url(request)[source]

almir.views – Pyramid views

class almir.views.ClientView(request)[source]

Bases: almir.views.MixinView

detail()[source]
model

alias of Client

class almir.views.JobView(request)[source]

Bases: almir.views.MixinView

detail()[source]
list()[source]
model

alias of Job

schema

alias of JobSchema

class almir.views.LogView(request)[source]

Bases: almir.views.MixinView

model

alias of Log

schema

alias of LogSchema

class almir.views.MixinView(request)[source]

Bases: object

detail()[source]
get_form()[source]

Deals everything regarding forms for a request.

list()[source]
model = None
schema = None
class almir.views.PoolView(request)[source]

Bases: almir.views.MixinView

model

alias of Pool

class almir.views.StorageView(request)[source]

Bases: almir.views.MixinView

model

alias of Storage

class almir.views.VolumeView(request)[source]

Bases: almir.views.MixinView

list()[source]
model

alias of Media

schema

alias of MediaSchema

almir.views.about(request)[source]
almir.views.ajax_console_input(request)[source]
almir.views.console(request)[source]
almir.views.dashboard(request)[source]
almir.views.datatables(request)[source]

Implements server side interface for datatables.

For field reference look at http://www.datatables.net/usage/server-side

almir.views.httpexception(context, request)[source]

almir.lib – Non MVC code

almir.lib.bacula_base64 – Bacula custom base64 implmentation

Taken from https://github.com/ZungBang/baculafs/blob/master/baculafs/Base64.py under GPLv3

almir.lib.bacula_base64.decode_base64(base64)[source]

Bacula specific implementation of a base64 decoder

almir.lib.bconsole – Python interface to bconsole

class almir.lib.bconsole.BConsole(bconsole_command='bconsole -n -c %s', config_file=None)[source]

Bases: object

Interface to bconsole binary

classmethod from_temp_config(*args, **kwds)[source]

Constructs BConsole object with help of passing temporary file for the session.

get_jobs_settings()[source]
get_upcoming_jobs(days=1)[source]
get_version()[source]
is_running()[source]
make_backup(job, level=None, storage=None, fileset=None, client=None, priority=None, pool=None, when=None)[source]
send_command_by_polling(command, process=None)[source]
start_process()[source]
exception almir.lib.bconsole.BConsoleError[source]

Bases: exceptions.Exception

exception almir.lib.bconsole.DirectorNotRunning[source]

Bases: almir.lib.bconsole.BConsoleError

almir.lib.console_commands – Parsed list of bconsole commands

almir.lib.sqlalchemy_custom_types

class almir.lib.sqlalchemy_custom_types.BaculaDateTime(*args, **kwargs)[source]

Bases: sqlalchemy.types.TypeDecorator

Changes sqlite DateTime to parse 0 values as no value. Also converts to right timezone

impl

alias of DateTime

process_result_value(value, dialect=None)[source]
result_processor(dialect, coltype)[source]

almir.lib.sqlalchemy_declarative_reflection

class almir.lib.sqlalchemy_declarative_reflection.DeclarativeReflectedBase[source]

Bases: object

classmethod prepare(engine)[source]

Reflect all the tables and map !

almir.lib.sqlalchemy_lowercase_inspector

class almir.lib.sqlalchemy_lowercase_inspector.LowerCaseInspector(bind)[source]

Bases: sqlalchemy.engine.reflection.Inspector

Implements reflection inspector that reflects everything lowercase

get_columns(*a, **kw)[source]
get_foreign_keys(*a, **kw)[source]
get_indexes(*a, **kw)[source]
get_pk_constraint(*a, **kw)[source]

almir.lib.utils - General utilities

almir.lib.utils.convert_timezone(datetime)[source]

Converts datetime to timezone aware datetime.

Retrieving timezone:

  • get timezone from .ini settings
  • default to system timezone
almir.lib.utils.get_jinja_macro(macro)[source]

Return actual function from a jinja2 template

almir.lib.utils.nl2br(text)[source]
almir.lib.utils.render_rst_section(filename)[source]

Finds filename in documentation directory and renders it to html.

almir.lib.utils.timedelta_to_seconds(td)[source]
almir.lib.utils.yesno(text)[source]

almir.scripts – Runnable scripts package

almir.scripts.configure_deploy – Ask few questions and configure almir

Dirty script to output buildout.cfg, but it does the job.

almir.scripts.configure_deploy.ask_question(question, default=None, validator=None, func=<built-in function raw_input>)[source]
almir.scripts.configure_deploy.main()[source]

Entry point of this script

almir.scripts.configure_deploy.validate_engine(v)[source]
almir.scripts.configure_deploy.validate_int(v)[source]
almir.scripts.configure_deploy.validate_open_port(v)[source]
almir.scripts.configure_deploy.validate_timezone(v)[source]

almir.scripts.parse_console_commands – Parse help commands from bconsole source

almir.scripts.parse_console_commands.main()[source]
almir.scripts.parse_console_commands.parse_console_commands(source)[source]

almir.tests – Tests package

almir.tests.test_functional – Functional tests